Member 13298316 Ответов: 2

Я столкнулся с проблемой с этим кодом, когда когда-либо я суммировал свою продажу, то получил ошибку, которая заключается в том, что входная строка находится в неправильном формате


Я пытаюсь выбрать имя дилера с помощью выпадающего списка location in location и dealer и пытаюсь отправить продажу в базу данных.

но всякий раз, когда я отправлялся отправлять свою продажу в базу данных, то получал ошибку " входная строка была не в правильном формате"
Я не могу решить эту проблему что я могу для этого сделать,
ddlcountry для определения местоположения
ddlstate для имени дилера

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

<pre>using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Data;
using System.Data.SqlClient;
  
public partial class Index : System.Web.UI.Page
{
    JRDSQL jsql = new JRDSQL();
    JRDPopup jpop = new JRDPopup();
    SqlConnection conn = new SqlConnection(@"Data Source=DESKTOP-LCOBDHV\SQLEXPRESS;Initial Catalog=anay_master;Integrated Security=true;");
    public void Bind_ddlCountry()
    {
        conn.Open();
        SqlCommand cmd = new SqlCommand("select Location,LocationId from Location", conn);
        SqlDataReader dr = cmd.ExecuteReader();
        ddlcountry.DataSource = dr;
        ddlcountry.Items.Clear();
        ddlcountry.Items.Add("--Please Select country--");
        ddlcountry.DataTextField ="Location";
        ddlcountry.DataValueField = "Locationid";
        ddlcountry.DataBind();
        conn.Close();
    }
    public void Bind_ddlState()
    {
        conn.Open();

        SqlCommand cmd = new SqlCommand("select Dealer_Name,dealer_Id from tbDealerlist where LocationId='" + ddlcountry.SelectedValue.ToString()+ "'", conn);

        SqlDataReader dr = cmd.ExecuteReader();
        ddlstate.DataSource = dr;
        ddlstate.Items.Clear();
       
        ddlstate.DataTextField = "Dealer_Name";
        ddlstate.DataValueField = "dealer_Id";
        ddlstate.DataBind();
        conn.Close();
    }

    
    protected void page_Load(object sender, EventArgs e)
    {

        bool blogin = false;
        if (Session["SID"] != null)
        {
            if (Convert.ToInt32(Session["SID"].ToString()) > 0)
            {
                blogin = true;
            }
        }
        if (blogin == true)
        {
            if (!IsPostBack)
            {

            }
        }
        else
        {
            Response.Redirect("Login.aspx", false);

        }

        if (!IsPostBack)
        {
            DataBind();
            fillDDSMN();
            Bind_ddlCountry();
            
              //Bind_DDSMN();
           //fillddSMC();
            //fillddlcountry();
            //fillddlstate();
           

        }

    }


   
    
    protected void ddlcountry_SelectedIndexChanged(object sender, EventArgs e)
    {
        
        Bind_ddlState();
    } 

    //private void fillddlcountry()
    //{
    //    SqlParameter[] paramstate = { new SqlParameter("@Mode","location")
    //                               };
    //    jpop.PopupCombo(ddlcountry, "sp_Registration", paramstate);
    //}
    //private void fillddlstate()
    //{
    //    SqlParameter[] paramstate = { new SqlParameter("@Mode","Dealer")
    //                               };
    //    jpop.PopupCombo(ddlstate, "sp_Registration", paramstate);
    //}

    //private void fillddDN()
    //{
    //    SqlParameter[] paramstate = { new SqlParameter("@Mode","dealer")
    //                               };
    //    jpop.PopupCombo(ddDN, "sp_Registration", paramstate);
    //}

    private void fillDDSMN()
    {
        SqlParameter[] paramdg = {new SqlParameter("@Mode","product")
            };
        jpop.PopupCombo(DDSMN, "sp_Registration", paramdg);
    }
    //private void fillddSMC()
    //{
    //    SqlParameter[] parampl = {new SqlParameter("@Mode","Position")
    //                        };
    //    jpop.PopupCombo(ddSMC, "sp_Registration", parampl);


    //}

    protected void submit_Click(object sender, EventArgs e)
    {
        try
        {

            SqlParameter[] paramsave = { new SqlParameter("@Mode","sale"),
                                     //  new SqlParameter("@saledate",txtsldate.Text.Trim()),
                                       new SqlParameter("@sale_Invoice",txtslinvoice.Text.Trim()),
                                       new SqlParameter("@Dealer_Name",ddlstate.SelectedValue),
                                       new SqlParameter("@SProduct_name",DDSMN.SelectedValue),
                                        new SqlParameter("@Model_name",DDSMN.SelectedValue),
                                       new SqlParameter("@SProduct_Qty",txtslmdlqty.Text.Trim()),
                                       new SqlParameter("@sale_rate",txtslrate.Text.Trim()),
                                       //new SqlParameter("@Scredit",nmbcrd.Text.Trim()),
                                        new SqlParameter("@Scash",nmbcsh.Text.Trim()),
                                       // new SqlParameter("@Scash",nmbcsh.Text.Trim()),
                                        //new SqlParameter("@Product_cat",ddSMC.SelectedValue), 
                                         new SqlParameter("daily_scash",nmbcsh.Text.Trim()),
                                         //new SqlParameter("Daily_Scredit",nmbcrd.Text.Trim()),
                                   };

            int id = 0;
            id = jsql.execStoredProcudure("sp_sale", paramsave);

            if (id > 0)
            {
                JRDMessage.UserMessage(this, "Data submitted successfully !!!");

            }
        }
        catch (Exception ex)
        {
            JRDMessage.UserMessage(this, ex.Message);
        }
    }


   

}

2 Ответов

Рейтинг:
2

OriginalGriff

Здесь есть две вещи:
1) Никогда не объединяйте строки для построения SQL-команды. Это оставляет вас широко открытыми для случайной или преднамеренной атаки SQL-инъекции, которая может уничтожить всю вашу базу данных. Вместо этого используйте параметризованные запросы.
2) Перестаньте делать ненужные преобразования. Посмотрите на свой код:

SqlCommand cmd = new SqlCommand("select Dealer_Name,dealer_Id from tbDealerlist where LocationId='" + ddlcountry.SelectedValue.ToString()+ "'", conn);
Вы берете значение-которое, вероятно, уже находится в нужной вам форме - преобразуете его в строку, объединяете (см. (1) выше), а затем переходите к SQL, который должен преобразовать его обратно в то, с чего он начинался! Это создает массу отходов, а также потенциальные проблемы. Если значение является датой, например, то вы рискуете столкнуться с проблемами, поскольку две системы не обязательно настроены на ожидание дат в одном и том же формате.
А это:
if (Convert.ToInt32(Session["SID"].ToString()) > 0)
Зачем преобразовывать объект сеанса в строку, чтобы преобразовать его обратно в целое число? Сохраните целочисленное значение в сеансе и верните его обратно при извлечении!

Если вы разберетесь с ними, есть вероятность, что ваши проблемы с конверсией исчезнут одновременно...


Рейтинг:
2

Patrice T

new SqlParameter("@SProduct_Qty",txtslmdlqty.Text.Trim()),

Вы пытались сделать numeric parameters as numeric, date parameters as dates вместо струн.