先说明一下:我使用的Access,添加数据是遇到的情况,由于遇到多次所以找了下原因。
下面是代码,有注释的就是问题所在。 这是在DbHelperOleDb.cs中的片段。
/// <summary>
///
执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString"> SQL语句 </param>
/// <returns> 影响的记录数 </returns>
public static int ExecuteSql( string SQLString, params OleDbParameter[] cmdParms)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.OleDb.OleDbException E)
{
throw new Exception(E.Message);
}
}
}
}
private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] 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 (OleDbParameter parm in cmdParms)
{
// 如果传递的参数没有对应的值,则设为null值 (自己写的)
if (parm.Direction == ParameterDirection.InputOutput || parm.Direction == ParameterDirection.Input && parm.Value == null)
{
parm.Value = DBNull.Value;
}
cmd.Parameters.Add(parm);
}
}
/// </summary>
/// <param name="SQLString"> SQL语句 </param>
/// <returns> 影响的记录数 </returns>
public static int ExecuteSql( string SQLString, params OleDbParameter[] cmdParms)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
int rows = cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
return rows;
}
catch (System.Data.OleDb.OleDbException E)
{
throw new Exception(E.Message);
}
}
}
}
private static void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] 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 (OleDbParameter parm in cmdParms)
{
// 如果传递的参数没有对应的值,则设为null值 (自己写的)
if (parm.Direction == ParameterDirection.InputOutput || parm.Direction == ParameterDirection.Input && parm.Value == null)
{
parm.Value = DBNull.Value;
}
cmd.Parameters.Add(parm);
}
}
}
还有可能是其他原因造成的,比如:
1)请把OleDbType.Char改成VarChar。
2)然后把参数添加的顺序和你SQL语句中的参数顺序保持一致。