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);
...全文
31 点赞 收藏 12
写回复
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;
看看数据库操作类中存储过程中使用方法
回复 点赞
发动态
发帖子
C#
创建于2007-09-28

8.5w+

社区成员

64.0w+

社区内容

.NET技术 C#
社区公告
暂无公告