ado.net往sqlserver08插入数据报错。我把代码贴出来,麻烦大家帮我看看。谢谢!

fihuang 2012-03-24 10:15:25
首先是表设计:
create table Page
(
PageID int identity(1, 1) not null primary key,
PageUrl nvarchar(500) not null,
PageTitle nvarchar(100) not null,
CountOfClick int not null default 0
);


然后是c#:

SqlConnection conn = null;
SqlCommand cmd = null;

try
{
conn = new SqlConnection("Data Source=localhost;Initial Catalog=Test;Integrated Security=SSPI;");
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "insert into Page(PageUrl, PageTitle, CountOfClick) values(@PageUrl, @PageTitle, @CountOfClick)";
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@PageUrl", page.PageUrl));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@PageTitle", page.PageTitle));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CountOfClick", 0));
cmd.ExecuteNonQuery(); //【注意】这里报错:参数化查询 '(@PageUrl nvarchar(13),@PageTitle nvarchar(10),@CountOfClick big' 需要参数 '@CountOfClick',但未提供该参数。

return true;
}
catch
{
return false;
}
finally
{
if (cmd != null)
{
cmd.Dispose();
}
if (conn != null)
{
conn.Close();
conn.Dispose();
}
}
...全文
120 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fihuang 2012-03-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 chinajiyong 的回复:]
试了一下,这样不会出错[/Quote]chinajiyong,我试了一下,如果用一个int变量defaultnum,的确不会报错,如果不用变量,cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CountOfClick", 0));,这样就会报错。

我调试的时候看了一下,如果用变量,那么new出来的这个SqlParameter的DbType为Int32,SqlDbType为Int;如果不用变量,那么DbType是Int64,SqlDbType是BigInt。
EnForGrass 2012-03-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 fihuang 的回复:]

引用 4 楼 chinajiyong 的回复:
既然有默认值,就不要把默认值那个字段作为参数传递,把sql语句改成
cmd.CommandText = "insert into Page(PageUrl, PageTitle, CountOfClick) values(@PageUrl, @PageTitle, default)";
然后把 cmd.Parameters.Add(new S……
[/Quote]
string PageUrl = "http://www.baidu.com";
string PageTitle = "百度";
int defaultnum = 0;
string connstr = @"Data Source=.;DataBase=StudentManage;User ID=sa;Password=abc12345";
SqlConnection conn = null;
SqlCommand cmd = null;

try
{
conn = new SqlConnection(connstr);
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "insert into Page(PageUrl, PageTitle, CountOfClick) values(@PageUrl, @PageTitle, @CountOfClick)";
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@PageUrl", PageUrl));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@PageTitle", PageTitle));
cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CountOfClick", defaultnum));
cmd.ExecuteNonQuery(); //【注意】这里报错:参数化查询 '(@PageUrl nvarchar(13),@PageTitle nvarchar(10),@CountOfClick big' 需要参数 '@CountOfClick',但未提供该参数。

return true;
}
catch
{
return false;
}
finally
{
if (cmd != null)
{
cmd.Dispose();
}
if (conn != null)
{
conn.Close();
conn.Dispose();
}
}

试了一下,这样不会出错
fihuang 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chinajiyong 的回复:]
既然有默认值,就不要把默认值那个字段作为参数传递,把sql语句改成
cmd.CommandText = "insert into Page(PageUrl, PageTitle, CountOfClick) values(@PageUrl, @PageTitle, default)";
然后把 cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CountOfClick", 0));这句删掉
就行了[/Quote]那如果我插入的值和默认值不一样呢。问题的关键不在有没有默认值。
我把字段CountOfClick改成没有默认值,按照我顶楼的代码插入还是报同样的错。
EnForGrass 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fihuang 的回复:]

引用 1 楼 chuanzhang5687 的回复:

报的神马错
在cmd.ExecuteNonQuery()这里报错:
参数化查询 '(@PageUrl nvarchar(13),@PageTitle nvarchar(10),@CountOfClick big' 需要参数 '@CountOfClick',但未提供该参数。
[/Quote]
既然有默认值,就不要把默认值那个字段作为参数传递,把sql语句改成
cmd.CommandText = "insert into Page(PageUrl, PageTitle, CountOfClick) values(@PageUrl, @PageTitle, default)";
然后把 cmd.Parameters.Add(new System.Data.SqlClient.SqlParameter("@CountOfClick", 0));这句删掉
就行了
fihuang 2012-03-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chuanzhang5687 的回复:]

报的神马错
[/Quote]在cmd.ExecuteNonQuery()这里报错:
参数化查询 '(@PageUrl nvarchar(13),@PageTitle nvarchar(10),@CountOfClick big' 需要参数 '@CountOfClick',但未提供该参数。
fihuang 2012-03-24
  • 打赏
  • 举报
回复
还有个问题我请教一下,我插入@CountOfClick的值为0,在c#里面是int(Int32),但是我把参数添加到cmd.Parameter里面以后,发现这个参数的DbType是Int64,并且SqlDbType是BigInt。
哪位解释一下。
谢谢。
chuanzhang5687 2012-03-24
  • 打赏
  • 举报
回复
报的神马错

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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