C#对接MySQL插入Post时报错表z7h5wlemxfp9e62l.post不存在如何解决
问题根因
报错提示的z7h5wlemxfp9e62l.post是MySQL的标准库名.表名写法,不属于参数传递错误:你连接字符串中指定了默认操作库为z7h5wlemxfp9e62l,操作post表时会自动拼接成该库下的表,报错的直接原因是post表根本没有被创建。
具体问题点
- 主程序入口的建表逻辑被注释且类名写错
你Main方法里的//SaveBook.CreatePostTable();处于注释状态,完全没有执行建表操作,且建表静态方法属于SavePost类,你写的SaveBook是错误的类名。 - (潜在问题)Id字段逻辑冲突
你建表时给Id设置了AUTO_INCREMENT自增属性,但插入数据时手动给Id赋值,后续插入会大概率触发主键冲突报错。 - (潜在问题)Timestamp字段未初始化
Post实体实例化时没有给Timestamp赋值,插入时该字段会取到DateTime的默认值,不符合业务预期。 - (语法问题)接口实现错误
SavePost类中void ISavePost(Post myPost)属于无效语法,是接口方法实现格式写错,虽然不影响当前报错,但后续调用接口方法会触发异常。
修复方案
- 先执行建表操作
修改Main方法,取消建表语句的注释并修正类名:
static void Main(string[] args) { Console.WriteLine("Hello World!"); //DeletePost.DropPostTable(); SavePost.CreatePostTable(); // 首次运行开着,表创建完成后可注释避免重复建表报错 Post myPost = new Post(){Id = 1, Text = "Roll Tide", Timestamp = DateTime.Now}; myPost.Save.CreatePost(myPost); }
- (可选优化)统一Id逻辑
如果要使用数据库自增Id,修改建表和插入逻辑:
- 建表语句保留AUTO_INCREMENT
- 插入SQL改为:
INSERT INTO post(Text, Timestamp) VALUES(@text, @Timestamp),删除@Id参数的赋值代码
- (可选优化)修正接口实现
删除SavePost类中无效的void ISavePost(Post myPost)行,按业务需求实现ISavePost.SavePost方法即可。
内容的提问来源于stack exchange,提问作者abrush
相关产品推荐
相关产品推荐

