SqlParameter 的问题

phonlee 2009-07-11 09:49:11

一共需要传6个数据. 结果:成功了3个, 最后2个数据库中是null, 其中奇怪是@MaxcrackLocation
本来是7(debug模式能够看到),传过去确是5.

请教各位,集思广议
///////////////////////////////////////////////////////////////

SqlParameter paraMaxcrack = new SqlParameter("@Maxcrack", SqlDbType.VarChar, 10);
paraMaxcrack.Value = DBNull.Value;
if (m_GrinderMonitor1.m_drDetailCrackData != null)
{
float iMaxCrack = Convert.ToSingle(m_GrinderMonitor1.m_drDetailCrackData["lw"].ToString());
paraMaxcrack.Value = (iMaxCrack / 10.0).ToString();
}
cmd.Parameters.Add(paraMaxcrack);


SqlParameter paraMaxcrackLocation = new SqlParameter("@MaxcrackLocation", SqlDbType.VarChar, 10);
paraMaxcrackLocation.Value = DBNull.Value;
int iTest = 0;
if (m_GrinderMonitor1.m_drDetailCrackData != null)
{
iTest = Convert.ToInt32(m_GrinderMonitor1.m_drDetailCrackData["zby"].ToString());
paraMaxcrackLocation.Value = iTest;
//.ToString();//m_GrinderMonitor1.m_drDetailCrackData["zby"];
//2个方法都尝试了.还是不正确
}
cmd.Parameters.Add(paraMaxcrackLocation);

SqlParameter paraMaxcrackangle = new SqlParameter("@Maxcrackangle", SqlDbType.VarChar, 10);
paraMaxcrackangle.Value = DBNull.Value;
if (m_GrinderMonitor1.m_drDetailCrackData != null) paraMaxcrackangle.Value = m_GrinderMonitor1.m_drDetailCrackData["zbx"];
cmd.Parameters.Add(paraMaxcrackangle);

SqlParameter paraMaxbruise = new SqlParameter("@Maxbruise", SqlDbType.VarChar, 10);
paraMaxbruise.Value = DBNull.Value;
if (m_GrinderMonitor1.m_drDetailRuanDianData != null)
{
float iMaxRuanDian = Convert.ToSingle(m_GrinderMonitor1.m_drDetailRuanDianData["rd"].ToString());
paraMaxbruise.Value = (iMaxRuanDian / 10.0).ToString();
}
cmd.Parameters.Add(paraMaxbruise);

SqlParameter paraMaxbruiseLocation = new SqlParameter("@MaxbruiseLocation", SqlDbType.VarChar, 10);
paraMaxbruiseLocation.Value = DBNull.Value;
if (m_GrinderMonitor1.m_drDetailCrackData != null) paraMaxcrackLocation.Value = m_GrinderMonitor1.m_drDetailRuanDianData["zby"];
cmd.Parameters.Add(paraMaxbruiseLocation);

SqlParameter paraMaxbruiseangle = new SqlParameter("@Maxbruiseangle", SqlDbType.VarChar, 10);
paraMaxbruiseangle.Value = DBNull.Value;
if (m_GrinderMonitor1.m_drDetailCrackData != null) paraMaxcrackLocation.Value = m_GrinderMonitor1.m_drDetailRuanDianData["zbx"];
cmd.Parameters.Add(paraMaxbruiseangle);
...全文
69 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
phonlee 2009-08-29
  • 打赏
  • 举报
回复
感谢各位的回复!

我使用了format语句来生成sql
这样方便调试.
mathieuxiao 2009-07-12
  • 打赏
  • 举报
回复

SqlParameter paraMaxcrackLocation = new SqlParameter("@MaxcrackLocation", SqlDbType.VarChar, 10);
paraMaxcrackLocation.Value = DBNull.Value;
int iTest = 0;
if (m_GrinderMonitor1.m_drDetailCrackData != null)
{
iTest = Convert.ToInt32(m_GrinderMonitor1.m_drDetailCrackData["zby"].ToString());
paraMaxcrackLocation.Value = iTest;
//.ToString();//m_GrinderMonitor1.m_drDetailCrackData["zby"];
//2个方法都尝试了.还是不正确
}
cmd.Parameters.Add(paraMaxcrackLocation);

你的参数类型是Varchar(10),但是你赋的值是int(int iTest ),这样可能会出现一些问题。
另外,建议你输出iTest和m_GrinderMonitor1.m_drDetailCrackData的值出来看看,他们很可能为空值。


kingmax54212008 2009-07-12
  • 打赏
  • 举报
回复
参数和数据类型不匹配
qqiuzaihui 2009-07-12
  • 打赏
  • 举报
回复
似乎是你的参数和数据类型不匹配造成的。
sss_007 2009-07-12
  • 打赏
  • 举报
回复
ding...
windinwing 2009-07-12
  • 打赏
  • 举报
回复
SqlParameter paraMaxcrackLocation = new SqlParameter("@MaxcrackLocation", SqlDbType.VarChar, 10);
paraMaxcrackLocation.Value = DBNull.Value;
int iTest = 0;
if (m_GrinderMonitor1.m_drDetailCrackData != null)
{
iTest = Convert.ToInt32(m_GrinderMonitor1.m_drDetailCrackData["zby"].ToString());
paraMaxcrackLocation.Value = iTest;
//.ToString();//m_GrinderMonitor1.m_drDetailCrackData["zby"];
//2个方法都尝试了.还是不正确
}

是否参数和数据类型不匹配? iTest是int啊.参数是SqlDbType.VarChar
另外 如果是在循环中是否调用cmd.Parameters.Clear()
值 debug不对,确定 cmdText里参数的顺序匹配?
phonlee 2009-07-11
  • 打赏
  • 举报
回复
string cmdText = "INSERT INTO Grinddata " +

"(RollNo,...," +
"...,Maxcrack,MaxcrackLocation,Maxcrackangle," +
"Maxbruise,MaxbruiseLocation,Maxbruiseangle," +
...)" +

"values (@RollNo,...," +
"...,@Maxcrack,@MaxcrackLocation,@Maxcrackangle," +
"@Maxbruise,@MaxbruiseLocation,@Maxbruiseangle,"+ "...)";

--------------------
我的sql语句在 C# 代码中,不是存储过程
十八道胡同 2009-07-11
  • 打赏
  • 举报
回复
mark
kkun_3yue3 2009-07-11
  • 打赏
  • 举报
回复
存储过程代码贴出来
qqiuzaihui 2009-07-11
  • 打赏
  • 举报
回复
把你的存储过程代码贴出来看看。
wuyq11 2009-07-11
  • 打赏
  • 举报
回复
SqlParameter[] paras ={
new SqlParameter("@Id",SqlDbType.Int),
new SqlParameter("@Name",SqlDbType.NVarChar,200)
};
paras[0].Value = Id;
paras[1].Value = NAME;
看看数据库操作类中存储过程中使用方法

111,098

社区成员

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

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

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