Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 0x在使用web api传递文件时被插入数据库_C#_Sql Server_Webapi - Fatal编程技术网

C# 0x在使用web api传递文件时被插入数据库

C# 0x在使用web api传递文件时被插入数据库,c#,sql-server,webapi,C#,Sql Server,Webapi,当使用web api在postman中传递文件时,0x被插入到数据库中。要将选定文件的二进制数据插入数据库。因此,如何在web api中将二进制数据形式的pdf文件插入数据库?您甚至在使用二进制数据之前就已经处理了它。在上面的方法中,删除以下代码行: ALTER PROCEDURE INSERT_PDF @DOCUMENT VARBINARY(MAX) = NULL AS BEGIN INSERT INTO PDF (Document) VALUE

当使用web api在postman中传递文件时,0x被插入到数据库中。要将选定文件的二进制数据插入数据库。因此,如何在web api中将二进制数据形式的pdf文件插入数据库?

您甚至在使用二进制数据之前就已经处理了它。在上面的方法中,删除以下代码行:

ALTER PROCEDURE INSERT_PDF
    @DOCUMENT VARBINARY(MAX) = NULL
AS
BEGIN
    INSERT INTO PDF
           (Document)
     VALUES
           (@DOCUMENT)
END
GO

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
using System.IO;
using Newtonsoft.Json;

namespace pdf.Controllers
{
    public class pdfController : ApiController
    {
        [HttpPost]
        [ActionName("insertPdf")]
        public int insertReceiptDocument(MemoryStream fileToPut)
        {
            //int varID = 0;
            fileToPut = new MemoryStream();
            byte[] document = fileToPut.ToArray();
            SqlConnection myConnection = new SqlConnection();
            myConnection.ConnectionString = ConfigurationManager.ConnectionStrings["ERPConnectionString"].ConnectionString;
            SqlCommand sqlCmd = new SqlCommand();
            //DateTime now = DateTime.Now;
            sqlCmd.CommandType = CommandType.StoredProcedure;
            sqlCmd.CommandText = "INSERT_PDF";
            sqlCmd.Connection = myConnection;
            sqlCmd.Parameters.Add("@DOCUMENT", SqlDbType.VarBinary, document.Length).Value = document;
            myConnection.Open();
            int rowInserted = sqlCmd.ExecuteNonQuery();
            myConnection.Close();
            return 1;
        }
    }
}

这行代码会删除从
fileToPut
参数中接收到的值,因此最终不会向数据库中插入二进制数据。

我不认为实际插入了0x。由于数据是二进制的,数据库查看器只是显示0x,而不是数据的一部分。当SQL Server向您显示表的内容时,它显然必须首先将所有内容转换为字符串,而varbinary literal字符串的格式始终为
0x
。那么,您是从哪里看到这个问题的?它是一个实际问题还是只是您如何检查的结果?非常确定它正在将一个空二进制数组加载到数据库中,因为您正在通过将fileToPut设置为新的MemoryStream()来清除其内容。删除该行代码后,我收到一个名为System.NullReferenceException的错误。什么是
null
?是
fileToPut
?如果是,则在传递到
insertReceiptDocument()
方法之前为null。你用过调试器吗?在代码中放一个断点,找出什么是
null
。和/或参考异常堆栈跟踪以确定发生
NullReferenceException
的代码行。
fileToPut = new MemoryStream();