Преобразование не удалось при преобразовании значения varchar из Int беседа - PullRequest
0 голосов
/ 15 марта 2019

У меня есть запрос, отфильтрованный среди выпадающих выбранных условий:

protected void Get_Data()
{
    try
    {
        string str = "";
        DataTable dt = new DataTable();
        str = "SELECT ROW_NUMBER() OVER (ORDER BY RowId DESC)AS RowNumber,p.CampaignName,";
        str += "p.MobileNo,";
        str += "p.Message,";
        str += "p.CharCount,";
        str += "p.strSenderID as Sender,";
        str += "u.strUserName as UserId,";
        str += "ds.strDR as DeliveryStatus,";
        str += "ds.strDiscription as Original_DRStatus,";
        str += "m.strMessageType as MessageType,";
        str += "CONVERT(varchar(20), p.ReceiveTime) as ReceiveTime,";
        str += "CONVERT(varchar(20), p.SendTime) as SendTime,";
        str += "CONVERT(varchar(20), p.DoneTime) as DoneTime,";
        str += "p.RootId as Root,";
        str += "sp.ProviderName,";
        str += "(CASE intAccountType WHEN 1  THEN 'Promotional' WHEN 2 THEN 'Transactional' WHEN 3 THEN 'OptIn' END)  as AccountType";
        str += " INTO ##Results3 ";
        //str += " FROM NEWSMSLOG_2019_01..LOG_010119  p ";
        str += " FROM NEWBULKSMS.dbo.LOG_010119  p ";
        str += " INNER JOIN deliverstatus ds ON p.DeliveryStatus = ds.intDR_status inner join users u on u.id = p.userid";
        str += " left join senderids b on b.id = p.senderid";
        str += " left join messagetype m on m.intcode = p.messagetype";
        str += " left join smppproviders sp on sp.RootId = p.RootId";
        str += " where 1 = 1 ";

        if(ddl_users.SelectedItem.Text.ToString() == "All")
        {
            str += string.Empty;
        }
        else
        {
            str += " and p.userid = ' + CONVERT(INT,"+ Convert.ToInt32(ddl_users.SelectedValue.ToString())+") + '";
        }

        if (ddl_sender.SelectedItem.Text.ToString() == "All")
        {
            str += string.Empty;
        }
        else
        {
            str += " and p.Senderid = '+CONVERT(INT,"+ Convert.ToInt32(ddl_sender.SelectedValue.ToString())+")+'";
        }

        if(!string.IsNullOrEmpty(txt_mobileno.Text.Trim()))
        {
            str += " and p.MobileNo like '' % '"+txt_mobileno.Text.Trim()+"' % ''";
        }
        else
        {
            str += string.Empty;
        }

        if(ddl_delevery.SelectedItem.Text.ToString() =="All")
        {
            str += string.Empty;
        }
        else
        {
            str += " and p.Deliverystatus in ('+CONVERT(INT,"+ Convert.ToInt32(ddl_sender.SelectedValue.ToString())+")+')'";
        }

        if(!string.IsNullOrEmpty(txt_CompaignName.Text.Trim()))
        {
            str += " and p.CampaignName like ''%'"+txt_CompaignName.Text.Trim()+"'%'' '";
        }
        else
        {
            str += string.Empty;
        }

        if(ddl_account.SelectedItem.Text.ToString() == "All")
        {
            str += string.Empty;
        }
        else
        {
            str += " and p.accounttype = '+CONVERT(INT,"+ Convert.ToInt32(ddl_account.SelectedValue.ToString())+")+'";
        }

        obj.Execute_Query(str);

        string str1 = " SELECT * FROM ##Results3";
        //str1 += " SELECT";
        //str1 += " CampaignName,MobileNo,Message,CharCount,Sender,UserId,DeliveryStatus,";
        //str1 += "Original_DRStatus,MessageType,ReceiveTime,SendTime,DoneTime,Root,ProviderName,AccountType";
        //str1 += " FROM ##Results3";
        //str1 += " WHERE RowNumber BETWEEN('1' - 1) * '500' + 1 AND((('1' - 1) * '500' + 1) + '500') - 1";

        dt = obj.Get_Data_Table_From_Str(str1);
        string str2 = " DROP TABLE ##Results3";
        obj.Execute_Query(str2);

        ViewState["data"] = dt;

        egrd.DataSource = dt;
        egrd.DataBind();

        ViewState["data"] = dt;
    }
    catch (Exception ex)
    {
        CommonLogic.SendMailOnError(ex);
    }
}

Теперь ошибка похожа на передачу выбранного текста из раскрывающегося списка в переменную столбца. Здесь отображается ошибка:

Сбой преобразования при преобразовании значения varchar '+ CONVERT (INT, 2) +' в тип данных int.

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

1 Ответ

1 голос
/ 15 марта 2019

Вы помещаете sql Convert методы в кавычки, чтобы они определялись как varchar значения в вашем sql коде. Например, в следующем коде:

str += " and p.userid = ' + CONVERT(INT,"+ Convert.ToInt32(ddl_users.SelectedValue.ToString())+") + '";

Вам необходимо удалить ' + и + ' до и после метода Convert и изменить его на:

str += " and p.userid = CONVERT(INT,"+ Convert.ToInt32(ddl_users.SelectedValue.ToString())+")";

Также эти три строки:

str += " and p.Senderid = '+CONVERT(INT,"+ Convert.ToInt32(ddl_sender.SelectedValue.ToString())+")+'";
str += " and p.Deliverystatus in ('+CONVERT(INT,"+ Convert.ToInt32(ddl_sender.SelectedValue.ToString())+")+')'";
str += " and p.accounttype = '+CONVERT(INT,"+ Convert.ToInt32(ddl_account.SelectedValue.ToString())+")+'";

должен измениться на:

str += " and p.Senderid = CONVERT(INT,"+ Convert.ToInt32(ddl_sender.SelectedValue.ToString())+")";
str += " and p.Deliverystatus in (CONVERT(INT,"+ Convert.ToInt32(ddl_sender.SelectedValue.ToString())+"))'";
str += " and p.accounttype = CONVERT(INT,"+ Convert.ToInt32(ddl_account.SelectedValue.ToString())+")";

У вас также есть дополнительные кавычки в LIKE разделах, например:

 str += " and p.MobileNo like '' % '"+txt_mobileno.Text.Trim()+"' % ''";

должно измениться на:

str += " and p.MobileNo like '%"+txt_mobileno.Text.Trim()+"%'";

Вы можете просто отладить свой код и посмотреть, как был создан SQL-код, а затем, чтобы его было легче исправить, вы можете скопировать его в редактор запросов SQL-сервера и проверить синтаксис.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...