Frage Fehler beim Konvertieren von einer Zeichenfolge in ein int32


Ich habe ein Problem, wo ich nur in der Lage bin, die Daten aus der Datenbank in einem einzigen Textfeld abzurufen. Was ich will ist, ich möchte die Daten aller Textfelder aus der Datenbank abrufen, aber wenn ich es versuchte, erhalten Fehler:

Hier ist der Code:

string connectionString = (@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=\Archives\Projects\Program\Sell System\Sell System\App_Data\db1.accdb;Persist Security Info=False;");

private List<List<TextBox>> textBoxCodeContainer = new List<List<TextBox>>();
private List<List<TextBox>> textBoxQuantityContainer = new List<List<TextBox>>();
private List<List<TextBox>> textBoxDescContainer = new List<List<TextBox>>();
private List<List<TextBox>> textBoxSubTotalContainer = new List<List<TextBox>>();
private List<List<TextBox>> textBoxTotalContainer = new List<List<TextBox>>();

private void Form1_Load(object sender, EventArgs e)
{  
    UpdateTextPosition();

    OleDbDataReader dReader;
    OleDbConnection conn = new OleDbConnection(connectionString);
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("SELECT [Code] FROM [Data]", conn);

    dReader = cmd.ExecuteReader();

    AutoCompleteStringCollection codesCollection = new AutoCompleteStringCollection();

    while (dReader.Read())
    {
         string numString = dReader[0].ToString().PadLeft(4, '0');
         codesCollection.Add(numString);
    }

    dReader.Close();
    conn.Close();
}

private void UpdateDatas()
{    
    OleDbDataReader dReader;
    OleDbConnection conn = new OleDbConnection(connectionString);
    conn.Open();
    OleDbCommand cmd = new OleDbCommand("SELECT DISTINCT [Description], [Price] FROM [Data] WHERE [Code]=@Code", conn);

    cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
    cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][0].Text;

    dReader = cmd.ExecuteReader();

    while (dReader.Read())
    {
        this.textBoxDescContainer[0][0].Text = dReader["Description"].ToString();
        this.textBoxSubTotalContainer[0][0].Text = dReader["Price"].ToString();
    }

    dReader.Close();
    conn.Close();
}

Ich habe es schon probiert:

cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][1].Text;

und

while (dReader.Read())
{
    this.textBoxDescContainer[0][1].Text = dReader["Description"].ToString();
    this.textBoxSubTotalContainer[0][1].Text = dReader["Price"].ToString();
}

aber ich habe einen Fehler, der sagt: "Fehler beim Konvertieren von Parameterwert von einer Zeichenfolge in ein int32"


5
2017-08-16 06:37


Ursprung


Antworten:


Versuche dies

du musst das analysieren Zeichenfolge zu Int32 Datentyp

cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
cmd.Parameters["Code"].Value =int.Parse(this.textBoxCodeContainer[0][1].Text);

Dies sollte funktionieren, wenn der Benutzer eine gültige Ganzzahl eingibt

Für z.B.

int Val=int.Parse("45");//Works for me

Hinweis: Dies funktioniert nicht für Dezimalwerte

Alternativ Wenn dein Price Wert enthält Dezimal, was Sie tun können ist

cmd.Parameters["Code"].Value = Convert.ToInt32(Convert.ToDouble(this.textBoxCodeContainer[0][1].Text));

Das sollte funktionieren


2
2017-08-16 06:39



diese Linie

cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][1].Text;

muss geändert werden in

int codeValue;
if(int.TryParse(this.textBoxCodeContainer[0][1].Text,out codeValue))
  cmd.Parameters["Code"].Value = codeValue;
else
  { 
    //do some error handling of invalid input
  }

wenn Sie versuchen, eine Zeichenfolge an den Parameter des Typs integer zu übergeben.


1
2017-08-16 06:48



Ändern Sie die Zeile

cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][0].Text;

zu

cmd.Parameters["Code"].Value = Convert.ToInt32(this.textBoxCodeContainer[0][0].Text);

1
2017-08-16 06:44



this.textBoxSubTotalContainer[0][0].Text=Convert.ToInt32(dReader["Price"].ToString());

Die obige Aussage soll Ihnen helfen ...

Grüße

Anurag


0
2017-08-16 06:47



Gemäß Ihrem Code, den Sie nicht wirklich erwähnen, wo der Fehler ausgelöst wird, scheint dies die Quelle Ihres Problems zu sein.

            cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
            cmd.Parameters["Code"].Value = this.textBoxCodeContainer[0][0].Text;

Sie haben erklärt "Code"als Integer aber Sie vergeben eine Text Wert. Konvertiere das zu Int32.

Int32 codeValue = 0; 
Int32.TryParse(this.textBoxCodeContainer[0][0].Text, out codeValue); 
cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer); 
cmd.Parameters["Code"].Value = codeValue;

0
2017-08-16 06:48