请教微软专家.NET写Access数据库的问题

nakrul 2002-10-23 10:32:30
我用C#向access中的一个表插入数据,当表里有八个字段时,使用ExecuteNonQuery执行insert语句,无论如何都要出错(错误信息为:insert into语句语法错误),但我任意的删掉一个字段后,就插入成功了。但使用DataAdpter的Update就没问题,请教这是怎么回事?
...全文
30 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
combread 2002-10-23
  • 打赏
  • 举报
回复
你去看看自己的数据库,插入null字段的设计属性,“允许空字符串”和“必填字段”。
nakrul 2002-10-23
  • 打赏
  • 举报
回复
数据表如下:
create table account_2
(serial_id char(8) not null,
goods_id char(4) not null,
haoshu char(20),
inpute_date date,
goods_num int,
goods_price double,
total_price double,
note char(60))
nakrul 2002-10-23
  • 打赏
  • 举报
回复
长度没有越界,处了主键外,所有的字段都插入null
nakrul 2002-10-23
  • 打赏
  • 举报
回复
可以,不过,代码很长,我的想法是作个类似的东西,代替DataAdapter的update。

//插入更新
for(int j=0; j<ds_update.Tables[i].Rows.Count; j++)
{
string strState = ds_update.Tables[i].Rows[j].RowState.ToString();

//该行为待新增的记录
if(strState == "Added")
{
//生成insert语句
string m_SQL = "INSERT INTO " + strTableName + " (";

//计算一个DataTable中有几个字段
for(int t=0; t<ds_update.Tables[i].Columns.Count; t++)
{
string strColumn_name = ds_update.Tables[i].Columns[t].ColumnName;

m_SQL += " " + strColumn_name;

if(t<(ds_update.Tables[i].Columns.Count-1))
m_SQL += ",";
}

m_SQL += " ) VALUES (";

for(int t=0; t<ds_update.Tables[i].Columns.Count; t++)
{
string strColumn = "";
string strDataType = ds_update.Tables[i].Columns[t].DataType.ToString();

//字段类型为字符型
if(strDataType == "System.String")
{
strColumn = ds_update.Tables[i].Rows[j][t].ToString();

if(strColumn == "")
m_SQL += " null";
else
m_SQL += " '" + strColumn + "'";
}
//字段类型为整型
else if((strDataType == "System.Int16") || (strDataType == "System.Int32") ||
(strDataType == "System.Double") || (strDataType == "System.Decimal"))
{
strColumn = ds_update.Tables[i].Rows[j][t].ToString();

if(strColumn == "")
m_SQL += " null";
else
m_SQL += " " + strColumn;
}
////字段类型为日期型
else if(strDataType == "System.DateTime")
{
//faint,搞了这么久,日期的问题还未解决
strColumn = ds_update.Tables[i].Rows[j][t].ToString();

if(strColumn == "")
m_SQL += " null";
else
m_SQL += " '" + strColumn + "'";

}

if(t<(ds_update.Tables[i].Columns.Count-1))
m_SQL += ",";

}

m_SQL += " )";

//开始执行insert语句
Comm.CommandText = m_SQL;
Comm.Connection = Conn;
Comm.Transaction = idbtrans;

try
{
Comm.ExecuteNonQuery();
}
catch(Exception exp)
{
string strErr = exp.Message;
idbtrans.Rollback();

if(Conn.State.ToString() == "Open")
Conn.Close();

return strErr;
}

//更新current row的rowstate状态
ds_update.Tables[i].Rows[j].AcceptChanges();
theday112 2002-10-23
  • 打赏
  • 举报
回复
以前我也遇到过,检查一下你的数据类型,长度是否符合要求!
TheAres 2002-10-23
  • 打赏
  • 举报
回复
一个建议:
在调试这方面问题的时候,先把你的insert sql 语句拿到 ACCESS的query中,去执行一下,看看有没有sql方面的错误.
zgh_ms 2002-10-23
  • 打赏
  • 举报
回复
感谢您使用微软产品。

关于这个问题,您能提供源代码么?

希望您能够提供可以重现这个错误的代码和数据库信息,大家一起做深入地分析。

谢谢您的配合。

-微软全球技术中心 -zgh

本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
nakrul 2002-10-23
  • 打赏
  • 举报
回复
我试过了,相同的代码在Oracle下运行无任何问题,看来是access这个烂数据库的问题了
nakrul 2002-10-23
  • 打赏
  • 举报
回复
看来没人知道了

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧