MySQL连接错误,没见过新的mysql错误:ERROR[42000][MySQL][ODBC3.51Driver][mysqld-5.5.9]你有SQL语法错误;检查与您的MySQL服务器版本对应的手册,了解在第1行的“System.Data.Odbc.OdbcCommand”附近使用的正确语法我以前从未见过此错误,也不知道它与它有什么关系?using(OdbcConnectionconnection=newOdbcConnection("Driver={MySQLODBC3.51Driver};Server=localhost;Database=gymwebsite2;User=root;Password=fakepass;")){//ODBC命令和事务对象OdbcCommand命令=newOdbcCommand();OdbcTransaction事务=null;//告诉命令使用我们的连接command.Connection=connection;try{//打开连接connection.Open();//开始事务transaction=connection.BeginTransaction();//为一个挂起的本地事务分配事务对象。命令。连接=连接;命令.事??务=事务;//TODO:构建SQLINSERT语句OdbcComm和cmd=newOdbcCommand("INSERTINTOUser(Email,FirstName,SecondName,DOB,Location,Aboutme,username,password)VALUES('"+TextBox1.Text+"','"+TextBox2.Text+"','"+TextBox3.Text+"','"+TextBox4.Text+"','"+TextBox5.Text+"','"+TextBox6.Text+"','"+TextBox7.Text+"','"+TextBox8.Text+"')",连接);//使用非查询调用运行插入command.CommandText=cmd.ToString();命令.ExecuteNonQuery();/*现在我们要再次调用MYSQL以获取它为主键创建的新索引值。这是使用标量调用的,因此它将返回SQL语句的值。我们将其转换为int以备后用。*/command.CommandText="selectlast_insert_id();";intid=Convert.ToInt32(command.ExecuteScalar());Label10.Text=Convert.ToString(id);//当前上下文中不存在名称id//提交事务。事务.提交();}catch(Exceptionex){Label10.Text=":"+例如消息;try{//尝试回滚事务。事务.回滚();}catch{//这里什么都不做;交易不活跃。}}}编辑:using(varconn=newOdbcConnection("Driver={MySQLODBC3.51Driver};Server=localhost;Database=gymwebsite2;User=root;Password=fakepass;")){conn.Open();使用(vartx=conn.BeginTransaction()){使用(varcmd=conn.CreateCommand()){cmd.CommandText="INSERTINTOUser(Email,FirstName,SecondName,DOB,Location,Aboutme,username,password)VALUES(@Email,@FirstName,@SecondName,@DOB,@Location,@Aboutme,@username,@password)";cmd.Parameters.AddWithValue("@Email",TextBox1.Text);cmd.Parameters.AddWithValue("@FirstName",TextBox2.Text);cmd.Parameters.AddWithValue("@SecondName",TextBox3.Text);//TODO:如果列是SQL中的日期类型,则可能需要解析cmd.Parameters.AddWithValue("@DOB",TextBox4.Text);cmd.Parameters.AddWithValue("@Location",TextBox5.Text);命令参数meters.AddWithValue("@Aboutme",TextBox6.Text);cmd.Parameters.AddWithValue("@username",TextBox7.Text);cmd.Parameters.AddWithValue("@password",TextBox8.Text);cmd.ExecuteNonQuery();//这一行的错误}using(varcmd=conn.CreateCommand()){cmd.CommandText="selectlast_insert_id();";intid=Convert.ToInt32(cmd.ExecuteScalar());Label10.Text=Convert.ToString(id);}tx.Commit();}}{“ExecuteNonQuery要求命令有一个事务,而分配给命令的连接处于挂起的本地事务中。命令的事务属性尚未初始化。”}为什么在有ADO.NET连接器时仍然使用错误的ODBC连接到MySql?形成查询时这种可怕的字符串连接是什么?:OdbcCommandcmd=newOdbcCommand("INSERTINTOUser(Email,FirstName,SecondName,DOB,Location,Aboutme,username,password)VALUES('"+TextBox1.Text+"','"+TextBox2.Text+"','"+TextBox3.Text+"','"+TextBox4.Text+"','"+TextBox5.Text+"','"+TextBox6.Text+"','"+TextBox7.Text+"','"+TextBox8.Text+"')",connection);你有没有听说过SQL注入和参数化查询来避免它?我只能说,如果你在写SQL查询时使用+号,那就像用枪朝你的脚开枪(或者视情况而定,但总的来说你是在开枪自杀,基本上是自杀行为).所以,这是正确的做法:using(varconn=newMySqlConnection("Server=localhost;Database=gymwebsite2;User=root;Password=commando;")){conn.Open();使用(vartx=conn.BeginTransaction()){使用(varcmd=conn.CreateCommand()){cmd.CommandText="INSERTINTOUser(Email,FirstName,SecondName,DOB,Location,Aboutme,username,password)VALUES(@Email,@FirstName,@SecondName,@DOB,@Location,@Aboutme,@username,@password)";cmd.Parameters.AddWithValue("@Email",TextBox1.Text);cmd.Parameters.AddWithValue("@FirstName",TextBox2.Text);cmd.Parameters.AddWithValue("@SecondName",TextBox3.Text);//TODO:如果列是SQL中的日期类型,则可能需要解析cmd.Parameters.AddWithValue("@DOB",TextBox4.Text);cmd.Parameters.AddWithValue("@Location",TextBox5.Text);cmd.Parameters.AddWithValue("@Aboutme",TextBox6.Text);cmd.Parameters.AddWithValue("@username",TextBox7.Text);cmd.Parameters.AddWithValue("@password",TextBox8.Text);命令.执行teNonQuery();}使用(varcmd=conn.CreateCommand()){cmd.CommandText="selectlast_insert_id();";intid=Convert.ToInt32(cmd.ExecuteScalar());Label10.Text=Convert.ToString(id);}tx.Commit();也请命名这些文本框,维护此代码的可怜人可能会绝望地尖叫。以上就是C#学习教程:MySQL连接错误,我没看过所有分享的内容,如果对大家有用,需要详细了解C#学习教程,希望大家多多关注——本文整理自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
