C# 0x在使用web api传递文件时被插入数据库
当使用web api在postman中传递文件时,0x被插入到数据库中。要将选定文件的二进制数据插入数据库。因此,如何在web api中将二进制数据形式的pdf文件插入数据库?您甚至在使用二进制数据之前就已经处理了它。在上面的方法中,删除以下代码行: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
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();