向存储过程传递的参数的大小有限制??

pumkmr 2007-07-18 11:26:30
存储过程如下:

CREATE PROCEDURE tbl_addnewsendtaskplan
@creator varchar(20),
@orgaddr varchar(36),
@sm_content varchar(600),
@destaddr varchar(8000),
@plantime datetime
AS
insert into tbl_SmSendTaskPlan(Creator,OrgAddr,PlanSendTime,DestAddr,SM_Content,TaskState)
values(@creator,@orgaddr,@plantime,@destaddr,@sm_content,0)
GO

tbl_SmSendTaskPlan表的定义如下:

ID int 4 0
Creator varchar 20 0
OrgAddr varchar 36 0
PlanSendTime datetime 8 0
DestAddr varchar 8000 0
SM_Content varchar 600 0
TaskState int 4 0

用c#写的调用存储过程的代码如下:
ThisConnection.Open();
SqlCommand ThisCommand = ThisConnection.CreateCommand();
ThisCommand.CommandText = "tbl_addnewsendtaskplan";
ThisCommand.CommandType = System.Data.CommandType.StoredProcedure;

ThisCommand.Parameters.Add(new SqlParameter("@creator", System.Data.SqlDbType.VarChar));
ThisCommand.Parameters.Add(new SqlParameter("@orgaddr", System.Data.SqlDbType.VarChar));
ThisCommand.Parameters.Add(new SqlParameter("@destaddr", System.Data.SqlDbType.VarChar));
ThisCommand.Parameters.Add(new SqlParameter("@plantime", System.Data.SqlDbType.DateTime));
ThisCommand.Parameters.Add(new SqlParameter("@sm_content", System.Data.SqlDbType.VarChar));


ThisCommand.Parameters["@creator"].Value = creator;
ThisCommand.Parameters["@orgaddr"].Value = orgaddr;
ThisCommand.Parameters["@plantime"].Value = timeplan;
ThisCommand.Parameters["@destaddr"].Value =destaddr[i];
ThisCommand.Parameters["@sm_content"].Value = content;

SqlDataReader ThisReader = ThisCommand.ExecuteReader();

ThisReader.Close();
ThisConnection.Close();

问题是:当destaddr[i]的长度超过800多的时候,就写不进数据库了,在这一字段数据库什么都没有显示。难道向存储过程传递参数的长度有限制不成?
...全文
322 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
echiynn 2007-07-18
  • 打赏
  • 举报
回复
我不太明白你實例化一個DataReader是起什麼作用的,而且你的ThisReader實例化以後什麼都沒幹就直接Close了....

插入數據直接調用ThisCommand.ExecuteNonQuery()方法不就行了嗎
pumkmr 2007-07-18
  • 打赏
  • 举报
回复
问题找到了,原来可以插入的,只是我在企业管理器里看不到。。。。。。
在查询分析器里用select或者直接打开 就看到了。。。。。。。。

lt1129 2007-07-18
  • 打赏
  • 举报
回复
varchar字段类型最大为8000
gahade 2007-07-18
  • 打赏
  • 举报
回复
drop table test
go
create table test(id int,test varchar(8000))

insert into test(test)
select replicate('A',8000)
/*
(所影响的行数为 1 行)
*/

应该还是你的代码有问题,可俺不会C#,帮顶!
pumkmr 2007-07-18
  • 打赏
  • 举报
回复
上面那个test表,我用sql语句直接插入,大过100多也不行,救命啊:

string aa = "a";
for (int i = 0; i < 1000; i++)
{
aa = aa + "a";
}

SqlConnection ThisConnection = new SqlConnection(@"Server=(local);Integrated Security=True;" + "DataBase=ServerDatabase");
ThisConnection.Open();
SqlCommand ThisCommand = ThisConnection.CreateCommand();
ThisCommand.CommandText = "insert into test(test) values('" + aa + "')";
SqlDataReader ThisReader = ThisCommand.ExecuteReader();
ThisReader.Close();
ThisConnection.Close();
pumkmr 2007-07-18
  • 打赏
  • 举报
回复
难道是我的版本有问题?我用的是sql 2000 个人版
pumkmr 2007-07-18
  • 打赏
  • 举报
回复
我按zjcxc加了长度参数,还是不行啊。
我自己做了一个测试表(表名test),定义如下:
id int 4 0
test varchar 8000 1

存储过程test_P如下:
CREATE PROCEDURE test_P
@content varchar(8000)
AS
insert into test(test)
values(@content)
GO

用c#调用存储过程如下:
string aa = "a";
for (int i = 0; i < 1000; i++)
{
aa = aa + "a";
}

SqlConnection ThisConnection = new SqlConnection(@"Server=(local);Integrated Security=True;" + "DataBase=ServerDatabase");
ThisConnection.Open();
SqlCommand ThisCommand = ThisConnection.CreateCommand();
ThisCommand.CommandText = "test_P";
ThisCommand.CommandType = System.Data.CommandType.StoredProcedure;

ThisCommand.Parameters.Add(new SqlParameter("@content", System.Data.SqlDbType.VarChar,8000));
ThisCommand.Parameters["@content"].Value = aa;

SqlDataReader ThisReader = ThisCommand.ExecuteReader();

我把构造aa的循环调到100,可以写入,当调到1000时,也就是aa的长度1000时,就写入不了了。

ThisReader.Close();
ThisConnection.Close();
zjcxc 2007-07-18
  • 打赏
  • 举报
回复
ThisCommand.Parameters.Add(new SqlParameter("@destaddr", System.Data.SqlDbType.VarChar, 8000));
paoluo 2007-07-18
  • 打赏
  • 举报
回复
当destaddr[i]的长度超过800多的时候,就写不进数据库了
-----------------
到底是8000還是800?

800應該沒有問題的。
昵称被占用了 2007-07-18
  • 打赏
  • 举报
回复
ThisCommand.Parameters.Add(new SqlParameter("@destaddr", System.Data.SqlDbType.VarChar));

应该还有个长度的参数
gahade 2007-07-18
  • 打赏
  • 举报
回复
varchar字段类型最大为8000,如果数据库里是varchar(8000),前台超过8000的也保存不了.可以使用text列来保存大文本

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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