ADO.NET 通过updatetext 如何更新 ntext字段?困扰我两周了!

zhwb36 2014-07-28 02:53:51
现有数据库是基于SQL SERVER 2000创建的,其中一张表有个字段是ntext类型,现在需要把二进制文件更新到此字段,我按照MSDN的方法,代码如下:

int BUFFER_LENGTH = 10240;
string strConnection = "server=localhost;database=test;uid=sa;pwd=123456";
SqlConnection objConnection = new SqlConnection(strConnection);
objConnection.Open();

SqlCommand cmdGetPointer = new SqlCommand("SET NOCOUNT ON;UPDATE t_SaleActionEntry SET FContent_Tag = '' WHERE FEntryID=4;"
+ "SELECT @Pointer=TEXTPTR(FContent_Tag) FROM t_SaleActionEntry WHERE FEntryID=4", objConnection);
SqlParameter pointerOutParam = cmdGetPointer.Parameters.Add("@Pointer", SqlDbType.Binary, 16);
pointerOutParam.Direction = ParameterDirection.Output;
cmdGetPointer.ExecuteNonQuery();

SqlCommand cmdUpdateBinary = new SqlCommand("UPDATETEXT t_SaleActionEntry.FContent_Tag @Pointer @Offset @Delete @Bytes", objConnection);
SqlParameter pointerParam = cmdUpdateBinary.Parameters.Add("@Pointer", SqlDbType.Binary, 16);
SqlParameter offsetParam = cmdUpdateBinary.Parameters.Add("@Offset", SqlDbType.Int);
SqlParameter deleteParam = cmdUpdateBinary.Parameters.Add("@Delete", SqlDbType.Int);
deleteParam.Value = 0;

SqlParameter bytesParam = cmdUpdateBinary.Parameters.Add("@Bytes", SqlDbType.Binary, BUFFER_LENGTH);

FileStream files = new FileStream("c:\\test.bat", FileMode.Open);
BinaryReader br = new BinaryReader(files);

int offset = 0;
offsetParam.Value = offset;

byte[] buffer = br.ReadBytes(BUFFER_LENGTH);
while (buffer.Length > 0)
{
pointerParam.Value = pointerOutParam.Value;
bytesParam.Value = buffer;
cmdUpdateBinary.ExecuteNonQuery();
deleteParam.Value = 0;
offset += BUFFER_LENGTH;
offsetParam.Value = offset;
buffer = br.ReadBytes(BUFFER_LENGTH);
}

br.Close();
files.Close();


执行一下就是报:“不能将数据类型 varbinary(max) 转换为 ntext”错误

因为更新字段为ntext,而@Bytes是一个Binary类型,执行确实会报错。
但我的需求就是要把二进制流写入NTEXT字段,能不能实现呢?
...全文
135 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhwb36 2014-07-28
  • 打赏
  • 举报
回复
引用 1 楼 jimil 的回复:
可以,writetext
我现在用的updatetext,能不能详细介绍一下?
jimil 2014-07-28
  • 打赏
  • 举报
回复
可以,writetext
打开链接下载源码: https://pan.quark.cn/s/589796089f72 C++课程设计任务列表,涵盖以下内容:1、识别并显示10至99范围内,各位数乘积超过各位数和的数值,例如数字12不满足条件,因为1乘以2小于1加2,故不输出;而数字27满足条件,因为2乘以7大于2加7,因此需要输出该数。2、开发一个功能,用于从用户输入的任意数量实数中找出最大值与最小值:首先要求用户输入一个正整数n,代表数值的个数,随后用户可输入任意n个实数,程序需找出这n个数中的最大值和最小值并将它们展示出来。3、实现两个已排序数组的合并操作:设有数组A和B,且假设这两个数组的元素均已按照降序排列。编写程序将A和B合并成一个新的数组C,并确保C中的元素同样保持降序排列。int A[10]={123, 86,80, 49,33,15,7,0,-1,-3};int B[10]={100,64,51,50,27,19,15,12,5,2};4、设计一个函数,用于计算特定分数序列前n项的总和,该序列为1/2,1/3,1/4,1/5,1/6,1/7,...。要求在主程序中提示用户输入一个整数n,并验证输入的合法性(n需大于1方为有效),若输入合法,则调用求和函数并显示计算结果。5、编写一个程序,计算两个用户输入日期之间的天数差:用户需以year1,month1,day1和year2,month2,day2的格式输入两个日期,程序随后计算这两个日期之间的天数间隔,并将结果输出到屏幕上。要求编制具有如下原型的函数difs2Date:long GetDayDifference(int y1,int m1,int d1,int y2,int m2,int d2);并在主函数中调用此函数,将计...

111,129

社区成员

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

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

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