mysql数据库的表有id和name列, id是int自增类型;
需求:c#封装函数, 往表里塞一条记录,然后返回id;
做法:封装一个函数,内容是先执行insert,数据塞进去后, 然后执行SELECT LAST_INSERT_ID(), 把id返回
担忧:如果这个函数同时被多个客户端同时调用,或者一个进程里多个线程同时调用,是否会返回错误的id?这种小概率会发生不
public static int InsertReturnID(string InsertSQLString, params MySqlParameter[] cmdParms)
{
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
using (MySqlCommand cmd = new MySqlCommand())
{
try
{
PrepareCommand(cmd, connection, null, InsertSQLString, cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
cmd.CommandText = "SELECT LAST_INSERT_ID();";
int id = Convert.ToInt32(cmd.ExecuteScalar());
return id;
}
catch (MySql.Data.MySqlClient.MySqlException e)
{
throw e;
}
}
}
}
private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = CommandType.Text;//cmdType;
if (cmdParms != null)
{
foreach (MySqlParameter parameter in cmdParms)
{
if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
(parameter.Value == null))
{
parameter.Value = DBNull.Value;
}
cmd.Parameters.Add(parameter);
}
}
}
※ 修改:·liuyx 于 Mar 5 10:58:39 2025 修改本文·[FROM: 111.199.78.*]
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 111.199.78.*]
修改:liuyx FROM 111.199.78.*
FROM 111.199.78.*