首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2013-07-11 
ado.net往数据库里面写入超长字符串的问题往一个nvarchar(max)的字段写入了一个50K的文本,结果自动截断,导

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的长度

热点排行