精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
用OleDbCommand执行insert into语句,报错,把SQL语句拷贝到Access内执行可以,后来查到特殊字段名前要带[],比如memo,至于哪些符号名称算是特殊的,估计要查Access的帮助。
表名是特殊符号,比如表名section,也要加[]。
有些字段写入时报这个错误,在Access表设计里也是允许空的,但是还报错。这里是空值理解错误,如果数值为空,要转换为数据库范畴的空值,下面提供了个函数进行转换:
public static object SqlNull(object obj)
{
if (obj == null || obj.ToString() == "")
{
return DBNull.Value;
}
else
{
return obj;
}
}
用select @@identity来获取失败,sql语句没问题,但是一直获取的是0,后来想到没用和insert into语句相同的连接,上个连接关闭了就获取不到了。
下面是简单三层下的获取自增代码
public static int ExecuteSqlWithID(string SQLString, params OleDbParameter[] cmdParms)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
using (OleDbCommand cmd = new OleDbCommand())
{
try
{
PrepareCommand(cmd, connection, null, SQLString, cmdParms);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
PrepareCommand(cmd, connection, null, "select @@IDENTITY as id",null);
object obj = cmd.ExecuteScalar();
if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
{
return -1;
}
else
{
return int.Parse(obj.ToString());
}}
catch (System.Data.OleDb.OleDbException E)
{
throw new Exception(E.Message); }
return -1;
}
}
}