insert 添加数据时, 参数 @**没有默认值
2012-05-24 18:37
155 查看
先说明一下:我使用的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);
}
} }
还有可能是其他原因造成的,比如:
1)请把OleDbType.Char改成VarChar。
2)然后把参数添加的顺序和你SQL语句中的参数顺序保持一致。
下面是代码,有注释的就是问题所在。 这是在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);
}
} }
还有可能是其他原因造成的,比如:
1)请把OleDbType.Char改成VarChar。
2)然后把参数添加的顺序和你SQL语句中的参数顺序保持一致。
相关文章推荐
- 用mybatis在java后台insert数据,能运行但数据库没有添加成功
- 用mybatis在java后台insert数据,能运行但数据库没有添加成功
- C#使用OleDB操作ACCESS插入数据时提示:参数 @p_Contract 没有默认值
- 关于C# Winform dataGridView显示时没有默认选中以及dataGridView添加DataTable中的数据
- Android用OKHttp进行数据请求时,统一给所有接口添加某个请求参数
- 添加数据向表中添加默认值
- 关于DropDownList绑定数据后,怎么添加另外的默认值
- 如果父类存在带参数的构造函数,而你又没有在父类中添加空的构造函数 ,子类就要显示(super)的调用父类的构造函数。
- ######纯注解ssh环境:crm系统实体类设计 ①客户信息的【数据字典】表的产生原因+②设计理解:【字典类没有添加客户属性的原因】=深刻理解类间关联,建立在有需求的基础上。
- 对get方式的参数,如何添加签名,防止数据被篡改或泄露
- EF中 向没有自动增加列的表添加数据 Entity Framework 数据生成选项DatabaseGenerated
- 绑定数据时,给按钮添加主键值参数
- mybatis+mysql insert添加数据后返回数据主键id
- Visual Studio 2010添加数据源时没有实体数据模型Entity Data Model选项
- oracle数据库零碎---Oracle Merge 使用,表中存在数据就修改,没有数据自动添加
- jplayer中动态添加列表曲目(js提取request中的list数据作为js参数使用)
- 解决使用AJax往DropDownList中动态添加数据时发生,回发或回调参数无效 的问题
- ExtJs6 store发送数据添加参数
- 使用JDBC添加带参数的数据
- 为什么返回的数据前面有callback? ashx/json.ashx?的后面加 callback=? 起什么作用 js url?callback=xxx xxx的介绍 ajax 跨域请求时url参数添加callback=?会实现跨域问题