SQL更新语句,这样添加参数有问题吗.

aspxstudio 2003-12-11 04:35:17
cmd.CommandText="update Standard set StdNr=@StdNr where ID=@ID";

cmd.Parameters.Add(new OleDbParameter("@ID",OleDbType.Integer));
cmd.Parameters["@ID"].Value=plateIndex;

cmd.Parameters.Add(new OleDbParameter("@StdNr",OleDbType.SmallInt));
cmd.Parameters["@StdNr"].Value=stdNr;

请大家给点意见.
...全文
97 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qimini 2003-12-12
  • 打赏
  • 举报
回复
以下代码来自MSDN:

public void CreateMyOleDbCommand(OleDbConnection myConnection,
string mySelectQuery, OleDbParameter[] myParamArray) {
OleDbCommand myCommand = new OleDbCommand(mySelectQuery, myConnection);
myCommand.CommandText = "SELECT CustomerID, CompanyName FROM Customers WHERE Country = ? AND City = ?";
myCommand.Parameters.Add(myParamArray);
for (int j=0; j<myParamArray.Length; j++)
{
myCommand.Parameters.Add(myParamArray[j]) ;
}
string myMessage = "";
for (int i = 0; i < myCommand.Parameters.Count; i++)
{
myMessage += myCommand.Parameters[i].ToString() + "\n";
}
MessageBox.Show(myMessage);
}


希望能对有所帮助~~~
枫叶 2003-12-12
  • 打赏
  • 举报
回复
可能是你数据库中的字段ID不具有唯一性,造成不能更新。
巍巍清风 2003-12-12
  • 打赏
  • 举报
回复
不能这样子循环添加参数,你只须添加一次参数,在每个循环里给这些参数赋值就行了。

if (isUpdate)
cmd.CommandText="update Standard set StdNr=@StdNr,StdResponse=@StdResponse,UnitResp=@UnitResp where ID=@ID";
cmd.CommandText="update Standards set UnitResp=@UnitResp where ID=@ID";
else
cmd.CommandText="insert into Standards(ID,StdNr,StdResponse,UnitResp) values(@ID,@StdNr,@StdResponse,@UnitResp)";

cmd.Parameters.Add(new OleDbParameter("@ID",OleDbType.Integer));
cmd.Parameters.Add(new OleDbParameter("@StdNr",OleDbType.SmallInt));
cmd.Parameters.Add(new OleDbParameter("@StdResponse",OleDbType.VarChar,60));
cmd.Parameters.Add("@UnitResp",OleDbType.VarChar,60);


for (short i=0;i<standards.GetLength(1);i++)
{
cmd.Parameters["@ID"].Value=plateIndex;

cmd.Parameters["@StdNr"].Value=i+1;

cmd.Parameters["@StdResponse"].Value=standards[0,i];

cmd.Parameters["@UnitResp"].Value=standards[1,i];

try
{
cmd.ExecuteNonQuery();
}
catch(System.Exception error)
{
MessageBox.Show("保存数据到数据库时出错!错误信息:"+error.Message.ToString(),"设备提示");
}
}
aspxstudio 2003-12-12
  • 打赏
  • 举报
回复
定义了主键,并且不是ID。 该是什么问题那。
csgui 2003-12-11
  • 打赏
  • 举报
回复
.net要求数据库表中必须要主键
aspxstudio 2003-12-11
  • 打赏
  • 举报
回复
不好意思,上述代码中下面一句话是多余的
cmd.CommandText="update Standards set UnitResp=@UnitResp where ID=@ID";
aspxstudio 2003-12-11
  • 打赏
  • 举报
回复
if (isUpdate)
cmd.CommandText="update Standard set StdNr=@StdNr,StdResponse=@StdResponse,UnitResp=@UnitResp where ID=@ID";
cmd.CommandText="update Standards set UnitResp=@UnitResp where ID=@ID";
else
cmd.CommandText="insert into Standards(ID,StdNr,StdResponse,UnitResp) values(@ID,@StdNr,@StdResponse,@UnitResp)";

for (short i=0;i<standards.GetLength(1);i++)
{
cmd.Parameters.Add(new OleDbParameter("@ID",OleDbType.Integer));
cmd.Parameters["@ID"].Value=plateIndex;

cmd.Parameters.Add(new OleDbParameter("@StdNr",OleDbType.SmallInt));
cmd.Parameters["@StdNr"].Value=i+1;

cmd.Parameters.Add(new OleDbParameter("@StdResponse",OleDbType.VarChar,60));
cmd.Parameters["@StdResponse"].Value=standards[0,i];

cmd.Parameters["@UnitResp"].Value=standards[1,i];
cmd.Parameters.Add("@UnitResp",OleDbType.VarChar,60).Value=standards[1,i];

try
{
cmd.ExecuteNonQuery();
}
catch(System.Exception error)
{
MessageBox.Show("保存数据到数据库时出错!错误信息:"+error.Message.ToString(),"设备提示");
}

以上是我的全部代码
刚才我按照 genuinekl(genuinekl) 和 brightheroes(闭关)说的试了一遍,还是不行。
你们的都行吗。
tangyanjun1 2003-12-11
  • 打赏
  • 举报
回复
Standard 好像是个表名吧。
brightheroes 2003-12-11
  • 打赏
  • 举报
回复
Standard 是个什么字段??
可能是关键字

换一下名字
或者
[Standard ]
伪装绅士 2003-12-11
  • 打赏
  • 举报
回复
楼主的似乎和楼上的差不多.

genuinekl 2003-12-11
  • 打赏
  • 举报
回复
这是我写的一段程序,希望对你有帮助,你只要参照着写就OK了
public bool UpdatePassWord(Staff staff)
{
string updateStr;
updateStr = "UPDATE t_sys_staff SET password = @password ";
updateStr = updateStr + "WHERE staffid = @staffid ";

updateCommand = new SqlCommand(updateStr, conn);
updateCommand.Parameters.Add("@staffid", SqlDbType.VarChar).Value = staff.StaffID ;
updateCommand.Parameters.Add("@password", SqlDbType.VarChar).Value = staff.PassWord ;

try
{
updateCommand.ExecuteNonQuery();
return true;
}
catch
{
return false;
}
finally
{
conn.Close();
updateCommand.Dispose();
}
}
如有困难请于我联系QQ:1074088, 或者mail:njkdb@sina.com
caoit 2003-12-11
  • 打赏
  • 举报
回复
是不是你的表的问题
fairleng 2003-12-11
  • 打赏
  • 举报
回复
写的没有问题,看你怎么执行CMD,以及2个参数plateIndex和stdNr的类型定义。
jdxx 2003-12-11
  • 打赏
  • 举报
回复
用storedprocedure
巍巍清风 2003-12-11
  • 打赏
  • 举报
回复
cmd.Parameters.Add(new OleDbParameter("@ID",OleDbType.Integer));

把OleDbParameter构造函里边的参数写全试试,好象没有什么问题,你怎么执行这个cmd的。
aspxstudio 2003-12-11
  • 打赏
  • 举报
回复
楼上的正确,我知道的,可是为什么不能象我那样添加参数那,我有好多参数,想插入.和更新公用相同的参数,不知怎么能行.
udonome 2003-12-11
  • 打赏
  • 举报
回复
错了,没看到是int型,改成
cmd.CommandText="update Standard set StdNr=" + stdNr+" where ID=" + plateIndex;
udonome 2003-12-11
  • 打赏
  • 举报
回复
改成
cmd.CommandText="update Standard set StdNr='" + stdNr+"' where ID='" + plateIndex + "'";
aspxstudio 2003-12-11
  • 打赏
  • 举报
回复
我这样写 不提示错误,可是更新不了数据.不知为什么

111,119

社区成员

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

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

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