確定後,大量的閱讀,並試圖我仍然不能似乎得到這個工作:MySQL和插入最後一個ID問題仍然
OdbcCommand cmd = new OdbcCommand("INSERT INTO User (Email) VALUES ('[email protected]'); SELECT LAST_INSERT_ID();", cn);
cmd.ExecuteNonQuery();
using (OdbcDataReader reader = cmd.ExecuteReader())
{
string theUserId = String.Format("{0}", reader.GetString(0));
Label10.Text = theUserId;
表:
User
--------
UserID (auto increment, pk)
Email
運行在調試模式下我上得到錯誤這條線,
using (OdbcDataReader reader = cmd.ExecuteReader())
,並
cmd.ExecuteNonQuery();
Mysql在這一行上說它的語法錯誤SELECT LAST_INSERT_ID();"
,cn);但從什麼是閱讀這是合法的。
確切的錯誤:
ERROR [42000] [MySQL][ODBC 3.51 Driver][mysqld-5.5.9]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT LAST_INSERT_ID()' at line 1
編輯:Justins方法:
using (OdbcConnection connection = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite2; User=root; Password=commando;"))
{
// ODBC command and transaction objects
OdbcCommand command = new OdbcCommand();
OdbcTransaction transaction = null;
// tell the command to use our connection
command.Connection = connection;
try
{
// open the connection
connection.Open();
// start the transaction
transaction = connection.BeginTransaction();
// Assign transaction object for a pending local transaction.
command.Connection = connection;
command.Transaction = transaction;
// TODO: Build a SQL INSERT statement
OdbcCommand cmd = new OdbcCommand("INSERT INTO User (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);
// run the insert using a non query call
command.CommandText = cmd.ToString();
command.ExecuteNonQuery();
/* now we want to make a second call to MYSQL to get the new index
value it created for the primary key. This is called using scalar so it will
return the value of the SQL statement. We convert that to an int for later use.*/
command.CommandText = "select last_insert_id();";
id = Convert.ToInt32(command.ExecuteScalar());
// the name id doesnt not exist in the current context
// Commit the transaction.
transaction.Commit();
}
catch (Exception ex)
{
Label10.Text = ": " + ex.Message;
try
{
// Attempt to roll back the transaction.
transaction.Rollback();
}
catch
{
// Do nothing here; transaction is not active.
}
}
}
您是否允許在1'OdbcCommand'中執行2個查詢/語句?如果你在兩個單獨的項目中完成,會發生什麼? – Wrikken 2011-04-04 19:05:06
@Wrikken,就是這個問題.net mySQL ODBC驅動程序不允許在該上下文中使用多個命令。你必須撥打兩個不同的電話。我之前遇到過這個問題;) – Justin 2011-04-04 19:24:49
嘗試使用字符串,而不是使用字符串和連接參數創建另一個OdbcCommand對象。然後將command.CommandText設置爲該String。我想在創建第二個OdbcCommand對象時會發生一些奇怪的事情。 – Justin 2011-04-05 15:32:25