Reputation: 469
I get this error when uploading a file, even though my column data type in SQL is already a varbinary
. I don't know why my parameter @FileUpload
saying is a nvarchar
. By the I'm using datatable function so it could easily stored in whole and send to database, I'm also using UserDefinedTableType
for that and my datatype is already a varbinary
.
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" });
}
Upvotes: 1
Views: 693
Reputation: 82504
The type of the "Data"
column in your data table shouldn't be string
, it should be byte[]
- Change this:
dtItems.Columns.Add("Data", typeof(string));
To this:
dtItems.Columns.Add("Data", typeof(byte[]));
Upvotes: 2