none
上传文件到数据库问题 RRS feed

  • 问题

  • 上传文件到数据库的varbinary(Max)字段中

     ................ 点击添加按钮部分代码.............

    string filepath = Path.GetFullPath(Filelogos.PostedFile.FileName);   

    string binary = FileToBinary(filepath); 

    ds.InsertParameters.Add("logo",binary);--->这儿的类型转换有问题

    -------------------------------------------------------------------

    public static string FileToBinary(string FilePath)
        {
            FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
            int filelength = Convert.ToInt32(fs.Length);
            Byte[] filebyteArray = new byte[filelength];
            BinaryReader br = new BinaryReader(fs);
            for (int i = 0; i < filelength; i++)
            {
                br.Read(filebyteArray, 0, filelength);
            }
            string strData = Convert.ToBase64String(filebyteArray);
         
            return strData;
         
        }

    //报的错

    Implicit conversion from data type nvarchar(max) to varbinary(max) is not allowed. Use the CONVERT function to run this query.

    这个类型怎么转呀,我试了半天都不行呀。。。。

    ds.InsertParameters.Add();的参数需要是string类型,FileToBinary()不转返回string会报错呀

     还有一个问题就是,把文件转换为二进制存入数据库时,文件较大时,效率非常低,怎么让效率更高。

    2010年4月27日 9:32

答案

  •  

    直接转换为二进制存放到数据库

                   public static byte[] FileToBinary(string FilePath)
                {

                   FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
                    Byte[] b = new Byte[fs.Length];
                    fs.Read(b, 0, b.Length);
                    fs.Close();

                   return b;

          }


    努力+方法=成功
    • 已标记为答案 斌斌NO1 2010年4月30日 6:00
    2010年4月27日 9:59
  • 从数据库读文件不能直接获得流,效率也低。我还是建议你保存到本地磁盘,然后将文件地址存放到数据库字段里。


    Mog Liang
    • 已标记为答案 斌斌NO1 2010年4月30日 6:00
    2010年4月29日 6:51

全部回复

  • 你数据的logo字段是varbinary类型,而你写入数据库的却是字符串,类型有误。


    努力+方法=成功
    2010年4月27日 9:36
  •  

    直接转换为二进制存放到数据库

                   public static byte[] FileToBinary(string FilePath)
                {

                   FileStream fs = new FileStream(FilePath, FileMode.Open, FileAccess.Read);
                    Byte[] b = new Byte[fs.Length];
                    fs.Read(b, 0, b.Length);
                    fs.Close();

                   return b;

          }


    努力+方法=成功
    • 已标记为答案 斌斌NO1 2010年4月30日 6:00
    2010年4月27日 9:59
  • 如果一定要使用 ds.InsertParameters.Add()这个方法怎么办了?

    你直接回传二进制,ds.InsertParameters.Add();方法不能用

    2010年4月27日 10:27
  • 从数据库读文件不能直接获得流,效率也低。我还是建议你保存到本地磁盘,然后将文件地址存放到数据库字段里。


    Mog Liang
    • 已标记为答案 斌斌NO1 2010年4月30日 6:00
    2010年4月29日 6:51