插入语句有错误

szyjp 2009-12-30 04:10:13
写了一条插入语句,运行提示:
不存在从对象类型 System.Windows.Forms.TextBox 到已知的托管提供程序本机类型的映射。

研究了好久不知道问题出在了哪里,请高手赐教!
保存代码如下:

private void TS_Save_Click(object sender, EventArgs e)
{
if (txtID.Text != "" && txtPudid.Text != "")
{
try
{
string InsertComm = "insert into D_insert(insertid,pub_id,nums,sprice,crdate,crname,comment) values(@insertid,@pud_id,@nums,@sprice,@insert_date,@crname,@comment)";
SqlParameter[] ps = {new SqlParameter("@insertid",this.txtID.Text),new SqlParameter("@pud_id",this.txtPudid.Text),
new SqlParameter("@nums",this.txtNums),new SqlParameter("@sprice",this.txt_Sprice),new SqlParameter("@insert_date",this.IsertDate.Value),
new SqlParameter("@crname",operation.Userid),new SqlParameter("@comment",this.txtComment.Text)};

int i = operation.myComm(InsertComm, ps);
if (i == 0)
{
MessageBox.Show("保存失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}
catch (SqlException se)
{
MessageBox.Show(se.ToString());
}
TS_Add.Enabled = true;
TS_Update.Enabled = true;
TS_Del.Enabled = true;
TS_Sure.Enabled = true; ;
}
else
{
MessageBox.Show("没有单据信息不能保存!","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}


插入的方法:

//修改数据的方法
public static int myComm(string sql,params SqlParameter[] ps)
{
SqlConnection myConn = conn();
myConn.Open();

try
{
SqlCommand sqlComm = new SqlCommand(sql, myConn);
if (ps != null)
{
foreach (SqlParameter s in ps)
{
sqlComm.Parameters.Add(s);
}
}
return int.Parse(sqlComm.ExecuteNonQuery().ToString());
}
catch (SqlException se)
{
throw se ;
}
}
...全文
342 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
happy8888 2010-08-20
  • 打赏
  • 举报
回复
怎么没看到答案呢,我也出了这方面的问题,异常提示都一样,期待解决方法!!!
wangping06 2009-12-31
  • 打赏
  • 举报
回复
是数据表
wangping06 2009-12-31
  • 打赏
  • 举报
回复
看看存储过程的参数与传入的参数是不是对应的
szyjp 2009-12-31
  • 打赏
  • 举报
回复
小弟重新改了一下代码还是有同样的错误,但这次提示是数量这个字段了,现将代码贴在下面:
 private void TS_Save_Click(object sender, EventArgs e)
{
if (txtID.Text != "" && txtPudid.Text != "")
{
try
{
string InsertComm = "insert into D_insert(insertid,pub_id,nums,sprice,insert_date,crname,comment) values(@insertid,@pud_id,@nums,@sprice,@insert_date,@crname,@comment)";
SqlParameter inser = new SqlParameter();
inser.ParameterName = "@insertid";
inser.Value = this.txtID.Text;
inser.DbType = DbType.String;

SqlParameter pud = new SqlParameter();
pud.ParameterName = "@pud_id";
pud.Value = this.txtPudid.Text;
pud.DbType = DbType.String;

SqlParameter num = new SqlParameter();
num.ParameterName = "@nums";
num.Value = Convert.ToInt32(this.txtNums.Text.ToString());
num.DbType = DbType.Int32;

SqlParameter price = new SqlParameter();
price.ParameterName = "@sprice";
price.Value = Decimal.Parse(this.txt_Sprice.Text);
price.DbType = DbType.Decimal;

SqlParameter inserDate=new SqlParameter();
inserDate.ParameterName = "@insert_date";
inserDate.Value= this.IsertDate.Value;
inserDate.DbType = DbType.DateTime;

SqlParameter crname = new SqlParameter();
crname.ParameterName = "@crname";
crname.Value = operation.Userid;
crname.DbType = DbType.String;

SqlParameter comment = new SqlParameter();
comment.ParameterName = "@comment";
comment.Value = this.txtComment.Text;
comment.DbType = DbType.String;

SqlParameter[] ps = {inser,pud,num,price,inserDate,crname,comment};

int i = operation.myComm(InsertComm, ps);
if (i == 0)
{
MessageBox.Show("保存失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}

}
catch (SqlException se)
{
MessageBox.Show(se.ToString());
}
TS_Add.Enabled = true;
TS_Update.Enabled = true;
TS_Del.Enabled = true;
TS_Sure.Enabled = true; ;
}
else
{
MessageBox.Show("没有单据信息不能保存!","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
}


提示错误的图片如下:
rainsnowclowd 2009-12-30
  • 打赏
  • 举报
回复
沒看出來你是什麽數據庫

第一點是時間問題,對於insert_date這個列,你应该用to_data(string,'pattern')将插入的数据转换下。。
还有个可能会错哦,就是对于那些nvarchar的列,看看要不要用单引号引一下,就是这句话
string InsertComm = "insert into D_insert(insertid,pub_id,nums,sprice,crdate,crname,comment) values(‘@insertid’,‘@pud_id’。。。。

具体的自己看着改哦。。
szyjp 2009-12-30
  • 打赏
  • 举报
回复
abcdef1111111 大哥,真的感谢你的热心帮助!
我遗憾的告诉你,还是不行,
szyjp 2009-12-30
  • 打赏
  • 举报
回复
噢,不好意思,我再试一下
abcdef1111111 2009-12-30
  • 打赏
  • 举报
回复
[nums] [int] NULL ,
刚才就问你了,就是这里出错了,你把new SqlParameter("@nums",this.txtNums.Text)改成new SqlParameter("@nums",Convert.ToInt32(this.txtNums.Text))
szyjp 2009-12-30
  • 打赏
  • 举报
回复
表结构如下:

[insertid] [nvarchar] (30) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[pub_id] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[nums] [int] NULL ,
[sprice] [money] NULL ,
[insert_date] [datetime] NOT NULL ,
[crname] [nvarchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[crdate] [datetime] NOT NULL ,
[sure] [bit] NULL ,
[comment] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL

请各位大侠帮我看一下问题出在哪里,谢谢!
szyjp 2009-12-30
  • 打赏
  • 举报
回复
这样,我重新把改过的代码重新贴出来一下:


private void TS_Save_Click(object sender, EventArgs e)
{
if (txtID.Text != "" && txtPudid.Text != "")
{
try
{
string InsertComm = "insert into D_insert(insertid,pub_id,nums,sprice,crdate,crname,comment) values(@insertid,@pud_id,@nums,@sprice,@insert_date,@crname,@comment)";
SqlParameter[] ps = {new SqlParameter("@insertid",this.txtID.Text),new SqlParameter("@pud_id",this.txtPudid.Text),
new SqlParameter("@nums",this.txtNums.Text),new SqlParameter("@sprice",Decimal.Parse(this.txt_Sprice.Text)),new SqlParameter("@insert_date",Convert.ToDateTime(this.IsertDate.Value.ToString())),
new SqlParameter("@crname",operation.Userid),new SqlParameter("@comment",this.txtComment.Text)};

int i = operation.myComm(InsertComm, ps);
if (i == 0)
{
MessageBox.Show("保存失败!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
}
catch (SqlException se)
{
MessageBox.Show(se.ToString());
}
TS_Add.Enabled = true;
TS_Update.Enabled = true;
TS_Del.Enabled = true;
TS_Sure.Enabled = true; ;
}
else
{
MessageBox.Show("没有单据信息不能保存!","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
}
abcdef1111111 2009-12-30
  • 打赏
  • 举报
回复
@nums是什么类型?
szyjp 2009-12-30
  • 打赏
  • 举报
回复
设好断点调试,每个字段都有值,
但根据那个提示画面应该是日期值错误吧,
abcdef1111111 2009-12-30
  • 打赏
  • 举报
回复
new SqlParameter("@nums",this.txtNums),new SqlParameter("@sprice",this.txt_Sprice),这两个错你都改过了吗?
还有@nums是什么类型?
abcdef1111111 2009-12-30
  • 打赏
  • 举报
回复
你单行执行,看那里出错,你确定是日期那出错的吗?
szyjp 2009-12-30
  • 打赏
  • 举报
回复
abcdef1111111 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 szyjp 的回复:]
就是直接写:this.IsertDate.Value 报错啊

我现在写成:new SqlParameter("@insert_date",Convert.ToDateTime(this.IsertDate.Value))
还是不行,真郁闷!
[/Quote]具体什么错,贴出来看看
abcdef1111111 2009-12-30
  • 打赏
  • 举报
回复
你把长度设大些,长度为8时,日期是2009-12-30这样就超了
szyjp 2009-12-30
  • 打赏
  • 举报
回复
数据库中是这样的: 数据类型:datetime 长度:8
abcdef1111111 2009-12-30
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 szyjp 的回复:]
就是直接写:this.IsertDate.Value 报错啊

我现在写成:new SqlParameter("@insert_date",Convert.ToDateTime(this.IsertDate.Value))
还是不行,真郁闷!
[/Quote]你数据库中字段类型和存储过程中的一样吗?
szyjp 2009-12-30
  • 打赏
  • 举报
回复
就是直接写:this.IsertDate.Value 报错啊

我现在写成:new SqlParameter("@insert_date",Convert.ToDateTime(this.IsertDate.Value))
还是不行,真郁闷!
加载更多回复(21)

111,120

社区成员

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

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

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