У меня есть строка байтов данных base64EncodedString из iOS, которая является очень длинной строкой
let imageStr = imageData.base64EncodedString()
Я вызываю .NET-метод из моего ios, который вызывает хранимую процедуру для вставки этих байтов в базу данных.
Вот мой метод .NET, у меня установлен тип данных VarBinary
public string PostLandGradingImages(List<Images> landingCells)
{
try
{
using (connection = new SqlConnection(connectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand("PostLandGradingImages", connection))
{
command.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < landingCells.Count; i++)
{
command.Parameters.Clear();
SqlParameter parameter1 = new SqlParameter("@Job_No", SqlDbType.VarChar);
parameter1.Value = landingCells[i].jobNo;
parameter1.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter1);
SqlParameter parameter2 = new SqlParameter("@Image", SqlDbType.VarBinary);
parameter2.Value = landingCells[i].imageBytes;
parameter2.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter2);
command.ExecuteNonQuery();
}
}
}
}
catch (Exception e)
{
return e.Message.ToString();
}
return "All Good";
}
Вот мой класс изображений, обратите внимание, что мои imageBytes определены как байты []:
public class Images
{
public string jobNo { get; set; }
public byte[] imageBytes { get; set; }
}
Столбец, в который я вставляю, определяется как varbinary (MAX)
и вот моя хранимая процедура:
ALTER PROCEDURE [dbo].[PostLandGradingImages]
-- Add the parameters for the stored procedure here
@Job_No varchar(MAX) = NULL,
@Image varbinary(MAX) = NULL
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO LandGradingImages (Job_No, ImageBytes) VALUES (@Job_No, @Image)
END
Моя проблема - ничего не вставляется, я получаю эту ошибку в моем улове:
Ссылка на объект не установлена для экземпляра объекта.
Мой вопрос: что я делаю не так? Я не должен отправлять base64EncodedString или я не правильно устанавливаю свой класс? или моя колонка БД?
Я пробовал это:
byte[] bytes = System.Convert.FromBase64String(landingCells[i].imageBytes);
SqlParameter parameter2 = new SqlParameter("@Image", SqlDbType.VarBinary, 800000);
parameter2.Value = bytes;
parameter2.Direction = ParameterDirection.Input;
command.Parameters.Add(parameter2);
Всё равно не работает :( и я изменил imageBytes на string.