求解!C#中关于SQL SERVER2008数据库中text类型的读取和写入

时间:2023-01-04 13:36:29
目前在做一个winform的小程序
需要将电脑上的.txt文件保存到sql server数据库中
(注意: 数据保存到数据库中以后 text类型这一列应该显示的是<二进制数据>)
然后需要的时候 将此保存到数据库的二进制数据(也就是数据库中text类型的数据)读取出来
显示到符文本框中 显示到哪倒无所谓了
对于text类型的数据 该怎么读取和写入啊?
在线等!~!~

9 个解决方案

#1


lz可以使用FileStream流进行读写,关于具体如何使用,lz看看帮助就很容易实现了

#2


引用 1 楼 wjwcq 的回复:
lz可以使用FileStream流进行读写,关于具体如何使用,lz看看帮助就很容易实现了

filestream 我都进去 全是?之类的 不是二进制数据啊
你看我的代码

ofd.Title = "*txt|*.txt|*.doc|*.docx";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                string fullpath = ofd.FileName;//文件路径
                  FileStream fs = new FileStream(fullpath, FileMode.Open);
                //BinaryReader br = new BinaryReader(fs);
                StreamReader sr = new StreamReader(fs);
                string txt = sr.ReadToEnd();


                //打开数据库
                string server = @".\SQLEXPRESS";
                string conStr = string.Format("server={0};uid={1};pwd={2};database={3}",
                                server, "sa", "123", "TestDB");
                SqlConnection con = new SqlConnection(conStr);
                try
                {
                    con.Open();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                SqlCommand com = new SqlCommand("insert into Text values(@TextList)", con);

                com.Parameters.Add("TextList", SqlDbType.Text);

                com.Parameters["TextList"].Value = txt;

                com.ExecuteNonQuery();

                con.Close();
            }

#3


Text字段类型怎么会显示<二进制数据>呢?

#4


引用 3 楼 sofant 的回复:
Text字段类型怎么会显示<二进制数据>呢?

那我应该有什么类型的呢?还是说就用TEXT类型 保存我说的数据
除了image类型 还有什么类型我能用?

#5


希望能帮倒你
//这个Paths是文件路径比如说 D:/test.txt
var Rbytes = File.ReadAllBytes(Paths); //把txt文件的内容读取出来给Rbytes

var db = datetable(Rbytes);
foreach (var t in db )
{
   Info.Text = t;
}


#6


引用 4 楼 andy1020tc 的回复:
引用 3 楼 sofant 的回复:
Text字段类型怎么会显示<二进制数据>呢?

那我应该有什么类型的呢?还是说就用TEXT类型 保存我说的数据
除了image类型 还有什么类型我能用?


如果你是全文本的,直接使用Text类型就好。
我看到你的"*txt|*.txt|*.doc|*.docx";如果是doc文档,就有可能包含图片了,
你可以用varbinary(MAX)


    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("读取文件");
            byte[] buffer;
            using (FileStream fs = new FileStream(@"D:\Test.docx", FileMode.Open, FileAccess.Read))
            {
                buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
            }
            

            using(SqlConnection sqlCn=new SqlConnection(
                "Data Source=...; Initial Catalog=...; User Id=...; Password=..."))
            using (SqlCommand sqlCmd = sqlCn.CreateCommand())
            {
                Console.WriteLine("写入数据库");
                sqlCmd.CommandText = "insert into Table_1(Text) values(@Text)";
                sqlCmd.Parameters.Add("@Text", System.Data.SqlDbType.Binary, int.MaxValue).Value = buffer;
                sqlCn.Open();
                sqlCmd.ExecuteNonQuery();

                Console.WriteLine("从数据库查出来");
                sqlCmd.CommandText = "select top 1 Text from Table_1";
                object value = sqlCmd.ExecuteScalar();
                buffer = (byte[])value;
            }

            Console.WriteLine("写入文件");
            using (FileStream fs = new FileStream(@"D:\Test1.docx", FileMode.OpenOrCreate, FileAccess.Write))
            {
                fs.Write(buffer, 0, buffer.Length);
            }

            Console.ReadLine();
        }
    }

#7


引用 6 楼 sofant 的回复:
引用 4 楼 andy1020tc 的回复:
引用 3 楼 sofant 的回复:
Text字段类型怎么会显示<二进制数据>呢?

那我应该有什么类型的呢?还是说就用TEXT类型 保存我说的数据
除了image类型 还有什么类型我能用?


如果你是全文本的,直接使用Text类型就好。
我看到你的"*txt|*.txt|*.doc|*.docx";如果是doc文档,就有可能包含图……

那要是我想把存入的数据 取出来 显示到富文本框中 该如何操作呢?

#8


LZ一会存储类型text一会又和二进制流扯上关系,到底你要怎么存储

#9


引用 8 楼 chinajiyong 的回复:
LZ一会存储类型text一会又和二进制流扯上关系,到底你要怎么存储

最初只是想把txt文档保存到数据库中
但是text类型又不行 现在知道了 可以用arbitrary类型

#1


lz可以使用FileStream流进行读写,关于具体如何使用,lz看看帮助就很容易实现了

#2


引用 1 楼 wjwcq 的回复:
lz可以使用FileStream流进行读写,关于具体如何使用,lz看看帮助就很容易实现了

filestream 我都进去 全是?之类的 不是二进制数据啊
你看我的代码

ofd.Title = "*txt|*.txt|*.doc|*.docx";
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                string fullpath = ofd.FileName;//文件路径
                  FileStream fs = new FileStream(fullpath, FileMode.Open);
                //BinaryReader br = new BinaryReader(fs);
                StreamReader sr = new StreamReader(fs);
                string txt = sr.ReadToEnd();


                //打开数据库
                string server = @".\SQLEXPRESS";
                string conStr = string.Format("server={0};uid={1};pwd={2};database={3}",
                                server, "sa", "123", "TestDB");
                SqlConnection con = new SqlConnection(conStr);
                try
                {
                    con.Open();
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }
                SqlCommand com = new SqlCommand("insert into Text values(@TextList)", con);

                com.Parameters.Add("TextList", SqlDbType.Text);

                com.Parameters["TextList"].Value = txt;

                com.ExecuteNonQuery();

                con.Close();
            }

#3


Text字段类型怎么会显示<二进制数据>呢?

#4


引用 3 楼 sofant 的回复:
Text字段类型怎么会显示<二进制数据>呢?

那我应该有什么类型的呢?还是说就用TEXT类型 保存我说的数据
除了image类型 还有什么类型我能用?

#5


希望能帮倒你
//这个Paths是文件路径比如说 D:/test.txt
var Rbytes = File.ReadAllBytes(Paths); //把txt文件的内容读取出来给Rbytes

var db = datetable(Rbytes);
foreach (var t in db )
{
   Info.Text = t;
}


#6


引用 4 楼 andy1020tc 的回复:
引用 3 楼 sofant 的回复:
Text字段类型怎么会显示<二进制数据>呢?

那我应该有什么类型的呢?还是说就用TEXT类型 保存我说的数据
除了image类型 还有什么类型我能用?


如果你是全文本的,直接使用Text类型就好。
我看到你的"*txt|*.txt|*.doc|*.docx";如果是doc文档,就有可能包含图片了,
你可以用varbinary(MAX)


    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("读取文件");
            byte[] buffer;
            using (FileStream fs = new FileStream(@"D:\Test.docx", FileMode.Open, FileAccess.Read))
            {
                buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
            }
            

            using(SqlConnection sqlCn=new SqlConnection(
                "Data Source=...; Initial Catalog=...; User Id=...; Password=..."))
            using (SqlCommand sqlCmd = sqlCn.CreateCommand())
            {
                Console.WriteLine("写入数据库");
                sqlCmd.CommandText = "insert into Table_1(Text) values(@Text)";
                sqlCmd.Parameters.Add("@Text", System.Data.SqlDbType.Binary, int.MaxValue).Value = buffer;
                sqlCn.Open();
                sqlCmd.ExecuteNonQuery();

                Console.WriteLine("从数据库查出来");
                sqlCmd.CommandText = "select top 1 Text from Table_1";
                object value = sqlCmd.ExecuteScalar();
                buffer = (byte[])value;
            }

            Console.WriteLine("写入文件");
            using (FileStream fs = new FileStream(@"D:\Test1.docx", FileMode.OpenOrCreate, FileAccess.Write))
            {
                fs.Write(buffer, 0, buffer.Length);
            }

            Console.ReadLine();
        }
    }

#7


引用 6 楼 sofant 的回复:
引用 4 楼 andy1020tc 的回复:
引用 3 楼 sofant 的回复:
Text字段类型怎么会显示<二进制数据>呢?

那我应该有什么类型的呢?还是说就用TEXT类型 保存我说的数据
除了image类型 还有什么类型我能用?


如果你是全文本的,直接使用Text类型就好。
我看到你的"*txt|*.txt|*.doc|*.docx";如果是doc文档,就有可能包含图……

那要是我想把存入的数据 取出来 显示到富文本框中 该如何操作呢?

#8


LZ一会存储类型text一会又和二进制流扯上关系,到底你要怎么存储

#9


引用 8 楼 chinajiyong 的回复:
LZ一会存储类型text一会又和二进制流扯上关系,到底你要怎么存储

最初只是想把txt文档保存到数据库中
但是text类型又不行 现在知道了 可以用arbitrary类型