读书人

ado.net往数据库里面写入超长字符串的

发布时间: 2013-07-11 15:38:46 作者: rapoo

ado.net往数据库里面写入超长字符串的问题
往一个nvarchar(max)的字段写入了一个50K的文本,结果自动截断,导致写入不完整,请问该如何解决! 字符串 截断
[解决办法]
判断字节数目,二次重发。

PS:你的头像典型的丝头
[解决办法]

引用:
Quote: 引用:

往一个nvarchar(max)的字段写入了一个50K的文本,结果自动截断,导致写入不完整,请问该如何解决!

为什么数据库里没有提示呢?

这么大??

换成text或者二进制流存储啥
[解决办法]
你在写入的时候有没有设置数据库对应参数的长度?
[解决办法]
目测你代码问题 与数据库无关
using System;
using System.Data;
using System.Data.SqlClient;
using System.IO;
using System.Text;

namespace Demo50K
{
class Program
{
static void Main(string[] args)
{
string s = new string('a', 1000000);
using (SqlConnection connection = new SqlConnection("Data Source=localhost;Initial Catalog=demo; User ID=sa;Password=sa;"))
{
connection.Open();
SqlCommand cmd = new SqlCommand("insert into tb (txt) values (@txt)", connection);
cmd.Parameters.Add("@txt", s);
cmd.ExecuteNonQuery();

//create xk document
StreamWriter writer = new StreamWriter("out.txt", false, Encoding.Default);


writer.Write(s);
writer.Close();

cmd.CommandText = "select txt from tb";
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
adapter.Fill(dt);
foreach (DataRow row in dt.Rows)
{
Console.WriteLine(row["txt"].ToString().Length);
}
connection.Close();
}
Console.ReadLine();
}
}
}


[解决办法]
先试试写小点的数据
[解决办法]
能否试试看,写到多大才会截断?截断位置前后的字符是什么?
[解决办法]
都写到40k,应该和大小无关,会不会是因为字符内容的问题,你将这位置前后内容删除一些再试试,看能否继续写入
[解决办法]
32位系统下NVARCHAR(MAX)最大好像是4000
50K早就超出了
用text这个数据类型吧
最大能装4g的数据ado.net往数据库里面写入超长字符串的有关问题
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

往一个nvarchar(max)的字段写入了一个50K的文本,结果自动截断,导致写入不完整,请问该如何解决!


自动截断是你程序调用时用了长度限制了吧调用Command的参数



SqlConnection con = new SqlConnection(...);
SqlCommand cmd = con.createcommand();
cmd.command = "insert into table1(col1) values(@pa_xlsbak)";


sqlparameter pa = null;
pa = new SqlParameter("@pa_xlsbak", System.Data.SqlDbType.NVarChar, -1);
pa.Value = "50多K的文本"
cmd.Parameters.Add(pa);
con.Open()
cmd.ExcuteNoQuery();
con.Close();



System.Data.SqlDbType.NVarChar 这个最多只支持4000个字符。
请改用 System.Data.SqlDbType.Text 还有把后边的那个-1去掉
[解决办法]


cmd.Parameters.Add(pa);
con.Open()
cmd.ExcuteNoQuery();
con.Close();



System.Data.SqlDbType.NVarChar 这个最多只支持4000个字符。
请改用 System.Data.SqlDbType.Text 还有把后边的那个-1去掉
这个不会再存储的时候报错么。类型不一致啊

数据库字段要设成Text 类型。NVChar类型只有4000的长度

读书人网 >C#

热点推荐