SujataJK Ответов: 2

Проблема возникает при хранении данных типа varbinary из ASP.NET с#


Привет,

Здесь у меня есть таблица comlaintmaster в базе данных вместе с varbinary и многими другими полями.
Когда я собираюсь сохранить данные в эту таблицу, то она не работает.

Пожалуйста, помогите мне,

Спасибо

Что я уже пробовал:

Это моя структура таблицы
CREATE TABLE [dbo].[tblComplaintMaster](
	[complID] [int] IDENTITY(1,1) NOT NULL,
	[complNo] [varchar](20) NOT NULL,
	[FinYr] [varchar](30) NOT NULL,
	[complDate] [date] NOT NULL,
	[complNature] [varchar](50) NOT NULL,
	[product] [varchar](100) NOT NULL,
	[prodct_srno] [varchar](20) NOT NULL,
	[issue_id] [int] NOT NULL,
	[descr] [varchar](255) NOT NULL,
	[assignto] [varchar](50) NOT NULL,
	[reqby] [varchar](50) NOT NULL,
	[contact_no] [varchar](50) NOT NULL,
	[email] [varchar](50) NOT NULL,
	[reqLoc] [varchar](100) NOT NULL,
	[priority] [varchar](20) NOT NULL,
	[status] [varchar](20) NOT NULL,
	[fromtime] [time](7) NULL,
	[totime] [time](7) NULL,
	[ReassignTo] [varchar](50) NULL,
	[ReassignDT] [date] NULL,
	[reason] [varchar](100) NULL,
	[call_report] [varbinary](max) NULL,
	[content_type] [varchar](50) NULL
)



а это мой код

 string complNo = txtComplNo.Text;
            string finyr = "01-04-2018-31-03-2018";
            DateTime complDt = Convert.ToDateTime(txtComplaintDt.Text);
            string complNature = ddlComplList.SelectedValue;
            string product = ProductList.SelectedValue;
            string srno = srnoList.Text;
            string descr = txtDesc.Text;
            string assignto = AssignToList.SelectedValue;
            string reqBy = UserList.SelectedValue;
            string loc = txtReqLoc.Text;
            string priority = ddlPriorityList.SelectedValue;
            string fromTime = DateTime.Now.ToString("HH:mm:ss");

            string toTime = "";

string filename = Path.GetFileName(callReportFileUpload.PostedFile.FileName);
                    Stream str = callReportFileUpload.PostedFile.InputStream;
                    BinaryReader br = new BinaryReader(str);
                    Byte[] bytes = br.ReadBytes((int)str.Length);
                    string ext = Path.GetExtension(filename);
                    string contentType = String.Empty;

                    //Set the contenttype based on File Extension
                    switch (ext)
                    {
                        case ".doc":
                            contentType = "application/vnd.ms-word";
                            break;
                        case ".docx":
                            contentType = "application/vnd.ms-word";
                            break;
                        case ".xls":
                            contentType = "application/vnd.ms-excel";
                            break;
                        case ".xlsx":
                            contentType = "application/vnd.ms-excel";
                            break;
                        case ".jpg":
                            contentType = "image/jpg";
                            break;
                        case ".png":
                            contentType = "image/png";
                            break;
                        case ".gif":
                            contentType = "image/gif";
                            break;
                        case ".pdf":
                            contentType = "application/pdf";
                            break;
                    }




                    SqlConnection con = null; ;
                    SqlCommand cmd;
                    SqlDataReader dr;
                    try
                    {

                        con = new SqlConnection(ConfigurationManager.ConnectionStrings["CRMConnection"].ConnectionString);
                        int issueid=Convert.ToInt32(issueList.SelectedValue);
                        string contact=txtContactNo.Text;
                        string email=txtEmail.Text;
                        //string qry = "insert into tblComplaintMaster values('" + complNo + "','" + finyr + "',Convert(Date,'" + complDt + "'),'" + complNature + "','" + product + "','" + srno + "',"+issueid+",'" + descr + "','" + assignto + "','" + reqBy + "','"+contact+"','"+email+"','" + loc + "','" + priority + "','" + txtStatus.Text + "','" + fromTime + "','" + toTime + "',null,null,null,'"+bytes.ToString()+"','"+contentType+"')";
                        //string qry = "insert into tblComplaintMaster(complNo,FinYr,complDate,complNature,product,prodct_srno,issue_id ,descr,assignto,reqby,contact_no,email,reqLoc,priority,status,fromtime,totime,ReassignTo,ReassignDT,reason,call_report,content_type) values (@complNo,@FinYr,@complDate,@complNature,@product,@prodct_srno,@issue_id ,@descr,@assignto,@reqby,@contact_no,@email,@reqLoc,@priority,@status,@fromtime,@totime,@ReassignTo,@ReassignDT,@reason,@call_report,@content_type)";                            
                        cmd = new SqlCommand("insert into tblComplaintMaster(complNo,FinYr,complDate,complNature,product,prodct_srno,issue_id ,descr,assignto,reqby,contact_no,email,reqLoc,priority,status,fromtime,totime,ReassignTo,ReassignDT,reason,call_report,content_type) values (@complNo,@FinYr,@complDate,@complNature,@product,@prodct_srno,@issue_id ,@descr,@assignto,@reqby,@contact_no,@email,@reqLoc,@priority,@status,@fromtime,@totime,@ReassignTo,@ReassignDT,@reason,@call_report,@content_type)");
                        cmd.Parameters.AddWithValue("@complNo", complNo);
                        cmd.Parameters.AddWithValue("@FinYr", finyr);
                        cmd.Parameters.AddWithValue("@complDate", SqlDbType.Date).Value = txtComplaintDt.Text;
                        cmd.Parameters.AddWithValue("@complNature", complNature);
                        cmd.Parameters.AddWithValue("@product", product);
                        cmd.Parameters.AddWithValue("@prodct_srno", srno);
                        cmd.Parameters.AddWithValue("@issue_id", issueid);
                        cmd.Parameters.AddWithValue("@descr", descr);
                        cmd.Parameters.AddWithValue("@assignto", assignto);
                        cmd.Parameters.AddWithValue("@reqby", reqBy);
                        cmd.Parameters.AddWithValue("@contact_no", contact);
                        cmd.Parameters.AddWithValue("@email", email);
                        cmd.Parameters.AddWithValue("@reqLoc", loc);
                        cmd.Parameters.AddWithValue("@priority", priority);
                        cmd.Parameters.AddWithValue("@status", txtStatus.Text);
                        cmd.Parameters.AddWithValue("@fromtime", fromTime);
                        cmd.Parameters.AddWithValue("@totime", toTime);
                        cmd.Parameters.AddWithValue("@ReassignTo", null);
                        cmd.Parameters.AddWithValue("@ReassignDT", null);
                        cmd.Parameters.AddWithValue("@reason", null);
                        cmd.Parameters.AddWithValue("@call_report", bytes);
                        cmd.Parameters.AddWithValue("@content_type", contentType);
                        

                        //cmd.Parameters.AddWithValue("@report", SqlDbType.VarBinary).Value = bytes;
                        //cmd.Parameters.AddWithValue("@call_report", bytes);
                       // cmd = new SqlCommand(qry);
                        Response.Write(cmd.CommandText);
                        con.Open();
                        cmd.Connection = con;

                        int result = cmd.ExecuteNonQuery();

                        if (result > 0)
                        {
                            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Message", "alert('Record Save')", true);
                            ResetAll();
                        }
                        else
                        {
                            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "Message", "alert('did not Save')", true);
                        }


проблема в том, что он не запускает никаких ошибок или исключений, но запись также не сохраняется.
Пожалуйста, помогите мне.

Wendelius

Вставляется ли строка без значения в call_report или ExecuteNonQuery возвращает 0?

SujataJK

Ответ.Write("Result=" + result); он не показывает никаких выходных данных.Я не понимаю, в чем проблема.

Wendelius

Я не могу найти такой код в вашем посте.

SujataJK

да,просто я добавляю эту строку в приложение y, но она не показывает никаких выходных данных.

Wendelius

Трудно сказать, в чем проблема, не видя всего соответствующего кода. Пожалуйста, используйте виджет "улучшить вопрос", чтобы изменить свой вопрос, чтобы показать полный отрывок кода.

2 Ответов

Рейтинг:
8

an0ther1

Во-первых, командир.ExecuteNoQuery() возвращает целое число, которое определяет, сколько записей было затронуто cmd, если вставка не происходит, то ожидаемый результат будет равен 0.

ASP.Net ограничивает размер файла, который может быть загружен с помощью атрибута конфигурации maxRequestLength - см.; HttpRuntimeSection.Свойство MaxRequestLength (System.Web.Configuration)[^]
Значение по умолчанию составляет 4 МБ, но может быть переопределено через ваш web.config

Кроме того, нет необходимости считывать файл в поток, если вы используете элемент управления FileUpload.

Я использую нижеприведенное, которое успешно работает - сокращенное для краткости

if(callReportFileUpload.HasFile)
{
    // read the bytes from the file
    byte[] bytFile = callReportFileUpload.FileBytes;
    
    // when adding your parameter ensure you set the datatype!!
    SqlParameter paramFile = new SqlParameter("@call_report", SqlDbType.VarBinary);
    // set direction and value
    paramFile.Direction = ParameterDirection.Input;
    paramFile.Value = bytFile;
    cmd.Parameters.Add(paramFile);
}


Надеюсь, это поможет


Рейтинг:
2

#realJSOP

Если не будет создано исключение, результат будет либо 1, либо 0. Я подозреваю, что с вашим запросом вставки что-то не так.

Вы уверены, что там вообще есть данные? bytes массив?

Вставляется ли вообще запись?

Является ли исключение броском?


SujataJK

@john Simmons

В моем приложении, когда я проверяю, прикреплен ли файл или нет, используя это

if (callReportFileUpload.HasFile)
{
Ответ.Write("имеет файл");
}
и к проверке данных в байтовом массиве с помощью ответа.Писать следующим образом

строка filename = Path.GetFileName(callReportFileUpload.PostedFile.имя файла);
Stream str = callReportFileUpload.PostedFile.Входной поток;
BinaryReader br = новый BinaryReader(str);
Byte[] bytes = br.ReadBytes((int)str.Длина);
Ответ.Запись(байт.Длина);

а ваша 3-я точечная запись вставляется или нет ? Я проверяю, что это использование
int result = cmd.Метод executenonquery();
Ответ.Писать("Результат=" + Результат);
Тогда это не дает никакого результата ни 0, ни 1.
Муравей ваш 4-й пункт он тоже не дает никаких исключений

SujataJK

еще одна вещь когда я вставляю нулевые значения для двоичного поля var то он работает нормально
я.е
строка qry = "insert into tblComplaintMaster values('" + complNo + "','" + finyr + "',Convert(Date,'" + complDt + "'),'" + complNature + "','" + product + "','" + srno + "'," + issueid + ",'" + descr + "','" + assignto + "','" + reqBy + "','" + contact + "','" + email + "','" + loc + "','" + priority + "','" + txtstatus.Текст + "','" + fromTime + "', '" + toTime + "',null,null,null,null)";
cmd = новая команда SqlCommand(qry);
против.Открыть();
УМК.Подключение = кон;

int result = cmd.Метод executenonquery();
Ответ.Писать("Результат=" + Результат);
Затем выдает результат=1 в качестве вывода, что означает успешную вставку значений в базу данных