دلیل خطای Implicit conversion from data type nvarchar to varbinary(max) is not allowed
موقع آپلود فایل در پروژه Asp.net mvc یک خطا دریافت می کنم. خطایی که دریافت می کنم این هست
Implicit conversion from data type nvarchar to varbinary(max) is not allowed
من توی Sql Server برای آپلود فایل یک ستون از نوع varbinary هم در نظر گرفتم اما نمی دونم چرا موقع آپلود فایل روی پارامتر @FilUpload این خطا رو دریافت می کنم. کدهایی که من نوشتم برای آپلود فایل در ادامه نمایشش می دم
public ActionResult UpdateClearanceItems(string TranNo, string CompanyID, string AtmCard, string FleetCard, string HmoCard,
string Uniform, string RSA, string EducationBenefitsRSA, string AmaBankLoan, string UsedSL,
string ProratedSL, string KingsTreat, string LastPayroll, string OthersHr, string remarksCompanyID,
string remarksAtmCard, string remarksFleetCard, string remarksHmoCard, string remarksUniform,
string remarksRSA, string remarksEducationBenefitsRSA , string remarksAmaBankLoan, string remarksUsedSL,
string remarksProratedSL, string remarksKingsTreat, string remarksLastPayroll, string remarksOthersHr,
HttpPostedFileBase[] FileUpload)
{
dynamic user = Session["UserProfile"];
string UserID = user[0].UserID.ToString();
DataTable dtItems = new DataTable();
dtItems.Columns.Add("FileName", typeof(string));
dtItems.Columns.Add("ContentType", typeof(string));
dtItems.Columns.Add("Data", typeof(string));
foreach (var file in FileUpload)
{
byte[] bytes;
using (BinaryReader br = new BinaryReader(file.InputStream))
{
bytes = br.ReadBytes(file.ContentLength);
}
dtItems.Rows.Add(file.FileName, file.ContentType, bytes);
}
using (SqlConnection con = new SqlConnection(GlobalFunction.GetConnection("PayrollConnect")))
{
con.Open();
try
{
SqlCommand cmd = new SqlCommand("spm_EmpClearancePending", con);
cmd.CommandTimeout = 1000000;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@TranNo", TranNo.ToString());
cmd.Parameters.AddWithValue("@UserID", UserID.ToString());
cmd.Parameters.AddWithValue("@CompanyID", CompanyID.ToString());
cmd.Parameters.AddWithValue("@AtmCard", AtmCard.ToString());
cmd.Parameters.AddWithValue("@FleetCard", FleetCard.ToString());
cmd.Parameters.AddWithValue("@HmoCard", HmoCard.ToString());
cmd.Parameters.AddWithValue("@Uniform", Uniform.ToString());
cmd.Parameters.AddWithValue("@RSA", RSA.ToString());
cmd.Parameters.AddWithValue("@EducationBenefitsRSA", EducationBenefitsRSA.ToString());
cmd.Parameters.AddWithValue("@AmaBankLoan", AmaBankLoan.ToString());
cmd.Parameters.AddWithValue("@UsedSL", UsedSL.ToString());
cmd.Parameters.AddWithValue("@ProratedSL", ProratedSL.ToString());
cmd.Parameters.AddWithValue("@KingsTreat", KingsTreat.ToString());
cmd.Parameters.AddWithValue("@LastPayroll", LastPayroll.ToString());
cmd.Parameters.AddWithValue("@OthersHr", OthersHr.ToString());
cmd.Parameters.AddWithValue("@remarksCompanyID", remarksCompanyID.ToString());
cmd.Parameters.AddWithValue("@remarksAtmCard", remarksAtmCard.ToString());
cmd.Parameters.AddWithValue("@remarksFleetCard", remarksFleetCard.ToString());
cmd.Parameters.AddWithValue("@remarksHmoCard", remarksHmoCard.ToString());
cmd.Parameters.AddWithValue("@remarksUniform", remarksUniform.ToString());
cmd.Parameters.AddWithValue("@remarksRSA", remarksRSA.ToString());
cmd.Parameters.AddWithValue("@remarksEducationBenefitsRSA", remarksEducationBenefitsRSA.ToString());
cmd.Parameters.AddWithValue("@remarksAmaBankLoan", remarksAmaBankLoan.ToString());
cmd.Parameters.AddWithValue("@remarksUsedSL", remarksUsedSL.ToString());
cmd.Parameters.AddWithValue("@remarksProratedSL", remarksProratedSL.ToString());
cmd.Parameters.AddWithValue("@remarksKingsTreat", remarksKingsTreat.ToString());
cmd.Parameters.AddWithValue("@remarksLastPayroll", remarksLastPayroll.ToString());
cmd.Parameters.AddWithValue("@remarksOthersHr", remarksOthersHr.ToString());
cmd.Parameters.AddWithValue("@FileUpload" ,dtItems);
cmd.ExecuteNonQuery();
}
catch(Exception err)
{ }
}
return RedirectToAction("ClearanceDashboard", "Clearance", new { Message = "Done" });
}
پاسخ هوش مصنوعی
خطای "Implicit conversion from data type nvarchar to varbinary(max) is not allowed" معمولاً به این دلیل رخ می دهد که شما در حال ارسال داده هایی هستید که نوع آن ها با نوع ستونی که در پایگاه داده تعریف شده است، مطابقت ندارد.
در کدی که شما ارایه داده اید، شما یک DataTable به نام dtItems ایجاد کرده اید که دارای ستونی با نام "Data" از نوع string است، در حالی که در پایگاه داده، نوع آن باید varbinary(max) باشد.
برای رفع این مشکل، باید نوع ستون "Data" را به byte[] تغییر دهید. به این صورت:
DataTable dtItems = new DataTable();
dtItems.Columns.Add("FileName", typeof(string));
dtItems.Columns.Add("ContentType", typeof(string));
dtItems.Columns.Add("Data", typeof(byte[])); // تغییر نوع به byte[]
سپس در خطی که به DataTable ردیف اضافه می کنید، نیازی به تبدیل داده به string نیست:
dtItems.Rows.Add(file.FileName, file.ContentType, bytes); // bytes به درستی ارسال می شود
این تغییرات باید مشکل شما را برطرف کند. بعد از اصلاحات، کد شما به شکل زیر خواهد بود:
public ActionResult UpdateClearanceItems(string TranNo, string CompanyID, string AtmCard, string FleetCard, string HmoCard,
string Uniform, string RSA, string EducationBenefitsRSA, string AmaBankLoan, string UsedSL,
string ProratedSL, string KingsTreat, string LastPayroll, string OthersHr, string remarksCompanyID,
string remarksAtmCard, string remarksFleetCard, string remarksHmoCard, string remarksUniform,
string remarksRSA, string remarksEducationBenefitsRSA , string remarksAmaBankLoan, string remarksUsedSL,
string remarksProratedSL, string remarksKingsTreat, string remarksLastPayroll, string remarksOthersHr,
HttpPostedFileBase[] FileUpload)
{
dynamic user = Session["UserProfile"];
string UserID = user[0].UserID.ToString();
DataTable dtItems = new DataTable();
dtItems.Columns.Add("FileName", typeof(string));
dtItems.Columns.Add("ContentType", typeof(string));
dtItems.Columns.Add("Data", typeof(byte[])); // تغییر نوع به byte[]
foreach (var file in FileUpload)
{
byte[] bytes;
using (BinaryReader br = new BinaryReader(file.InputStream))
{
bytes = br.ReadBytes(file.ContentLength);
}
dtItems.Rows.Add(file.FileName, file.ContentType, bytes);
}
using (SqlConnection con = new SqlConnection(GlobalFunction.GetConnection("PayrollConnect")))
{
con.Open();
try
{
SqlCommand cmd = new SqlCommand("spm_EmpClearancePending", con);
cmd.CommandTimeout = 1000000;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@TranNo", TranNo.ToString());
cmd.Parameters.AddWithValue("@UserID", UserID.ToString());
cmd.Parameters.AddWithValue("@CompanyID", CompanyID.ToString());
cmd.Parameters.AddWithValue("@AtmCard", AtmCard.ToString());
cmd.Parameters.AddWithValue("@FleetCard", FleetCard.ToString());
cmd.Parameters.AddWithValue("@HmoCard", HmoCard.ToString());
cmd.Parameters.AddWithValue("@Uniform", Uniform.ToString());
cmd.Parameters.AddWithValue("@RSA", RSA.ToString());
cmd.Parameters.AddWithValue("@EducationBenefitsRSA", EducationBenefitsRSA.ToString());
cmd.Parameters.AddWithValue("@AmaBankLoan", AmaBankLoan.ToString());
cmd.Parameters.AddWithValue("@UsedSL", UsedSL.ToString());
cmd.Parameters.AddWithValue("@ProratedSL", ProratedSL.ToString());
cmd.Parameters.AddWithValue("@KingsTreat", KingsTreat.ToString());
cmd.Parameters.AddWithValue("@LastPayroll", LastPayroll.ToString());
cmd.Parameters.AddWithValue("@OthersHr", OthersHr.ToString());
cmd.Parameters.AddWithValue("@remarksCompanyID", remarksCompanyID.ToString());
cmd.Parameters.AddWithValue("@remarksAtmCard", remarksAtmCard.ToString());
cmd.Parameters.AddWithValue("@remarksFleetCard", remarksFleetCard.ToString());
cmd.Parameters.AddWithValue("@remarksHmoCard", remarksHmoCard.ToString());
cmd.Parameters.AddWithValue("@remarksUniform", remarksUniform.ToString());
cmd.Parameters.AddWithValue("@remarksRSA", remarksRSA.ToString());
cmd.Parameters.AddWithValue("@remarksEducationBenefitsRSA", remarksEducationBenefitsRSA.ToString());
cmd.Parameters.AddWithValue("@remarksAmaBankLoan", remarksAmaBankLoan.ToString());
cmd.Parameters.AddWithValue("@remarksUsedSL", remarksUsedSL.ToString());
cmd.Parameters.AddWithValue("@remarksProratedSL", remarksProratedSL.ToString());
cmd.Parameters.AddWithValue("@remarksKingsTreat", remarksKingsTreat.ToString());
cmd.Parameters.AddWithValue("@remarksLastPayroll", remarksLastPayroll.ToString());
cmd.Parameters.AddWithValue("@remarksOthersHr", remarksOthersHr.ToString());
cmd.Parameters.AddWithValue("@FileUpload", dtItems);
cmd.ExecuteNonQuery();
}
catch(Exception err)
{ }
}
return RedirectToAction("ClearanceDashboard", "Clearance", new { Message = "Done" });
}
به خط زیر در کدهای خودتون دقت کنید
dtItems.Columns.Add("Data", typeof(string));
شما توی دیتابیس خودتون فیلدی رو که برای آپلود فایل و اطلاعات در نظر گرفتید از نوع Varbinary در نظر گرفتید اما توی این کدها از نوع string
کد خودتون رو به کد زیر تغییر بدید درست میشه
dtItems.Columns.Add("Data", typeof(byte[]));
- آموزش استفاده از پلاگین گردونه شانس در Asp.net core به همراه سورس
- نمایش متن به صورت فرمت شده در CkEditor
- آموزش استفاده از SignalR در Asp.net Core با مثال عملی
- ادغام چند گزارش استیمول سافت بصورت پی دی اف در یک فایل
- نحوه تغییر استایل کامپوننت select2 چگونه است ؟
- چگونه امنیت پروژه را در Asp.net Core افزایش دهیم ؟
- ارسال پارامتر در دستور window.open جی کویری
- ارسال پارامتر از طریق جاوااسکریپت با کلیک روی تگ a
- خطای 500 زمان اجرا شدن پروژه روی هاست
- کویری نویسی در استیمول سافت جهت فیلتر اطلاعات
- کار با CkEditor با قابلیت آپلود عکس
- خطا در ایجاد migration در Asp.net core
- مشکل تاریخ شمسی در سی شارپ
- تفاوت های Asp.net core و Asp.net mvc چیه؟
- دلیل اسپم شدن ایمیل های ارسالی از سرور
- ارسال ایمیل در Asp.net core
- نمایش گزارش stimulsoft روی کلاینت
- تفاوت های سی شارپ 8 با نسخه های قبلی چیه؟
- انتخاب چند سطر دلخواه توسط چک باکس در DataGrid و محاسبه جمع سطرهای انتخاب شده
- نمایش نوتیفکیشن در سی شارپ