2016-06-11 841 views
-5

このエラーが発生します。 invoiceNum変数のwhileループに入ると、このエラーが発生します。私が間違っていることを助言してもらえますか?'System.Int32'型のオブジェクトを 'System.String'型にキャストできませんエラー

string selectSqlQuery = "SELECT * FROM Invoice"; //WHERE invoice_no=" + 1 + ""; 
       //Create a command in C# to perform the sql Query 
       SqlCommand mySelectCommand = new SqlCommand(selectSqlQuery, myDBconnection); 
       //Creating the process for performing the command 
       SqlDataReader performCommand = mySelectCommand.ExecuteReader(); 
       //Executing the command or running the command 
      // performCommand.Read(); 

       while (performCommand.Read()) 
       { 

        invoiceNum = Convert.ToInt16(performCommand.GetString(0)); 
        pcBarcode = Convert.ToInt16(performCommand.GetString(1)); 
        customerID = Convert.ToInt16(performCommand.GetString(2)); 
        probDescr = performCommand.GetString(3); 
        empID = Convert.ToInt16(performCommand.GetString(4)); 
        currentDate = Convert.ToDateTime(performCommand.GetString(5)); 
        solution = performCommand.GetString(6); ; 
        partsID = Convert.ToInt16(performCommand.GetString(7)); 
        labourPrice = Convert.ToInt16(performCommand.GetString(8)); 
        totalPrice = Convert.ToInt16(performCommand.GetString(9)); 
        // invoiceClass = new Invoice(invoiceNum, pcBarcode, customerID, probDescr, empID, currentDate, solution, partsID, labourPrice, totalPrice); 
       } 
       //Closing the execution of the command 
       performCommand.Close(); 
       //Closing the connection 
       myDBconnection.Close(); 
      } 
+0

InvoiceNum変数定義とInvoiceテーブル定義の最初の列は何ですか? – piotrwest

+0

両方ともint型です – noor

答えて

1

変更:

int i = 0; 
string s = i.ToString(); 

また、あなたのタイプでは、次の操作を行うことができIConvertible実装している場合請求書番号:

invoiceNum = performCommand.GetInt16(0); 
+0

このエラーが発生します:System.InvalidCastException:指定されたキャストが無効です。 – noor

+0

私はinvoiceNum = performCommand.GetInt32(0)に変更しましたが、これで2時間苦労しました。お気軽に – noor

+0

invoiceNum = performCommand.GetInt32(0); ? – piotrwest

0

このようなエラーを修正するために、あなたの整数をToStringメソッドを呼び出す必要があります:行

int i = 0; 
string s = Convert.ToString(i); 
0

invoiceNumは32ビットの整数なので、読者のGetInt32メソッドのように読む必要があります。読者はタイプ間の自動翻訳を行いません。 GetStringは、基礎となるフィールドがテキストとして入力され、発生しているキャストエラーがあなたに正確に伝えている場合にのみ機能します:整数を文字列に変換できません。代わりに読むことを

invoiceNum = Convert.ToInt16(performCommand.GetString(0)); 

invoiceNum = Convert.ToInt16(performCommand.GetInt32(0)); 

をあなたは残りのフィールド読みを確認する必要があります

No conversions are performed; therefore, the data retrieved must already be a string.

Call IsDBNull to check for null values before calling this method.

をあなたが再書き込みラインべき:言うGetString documentationの発言のセクションを参照してください。正しい根底にある型に基づいた行。

ほとんどのコードを同じにしたい場合は、代わりにGetValueを使用する必要があります。objectは、実行時の型にフィールドの型が反映されるためです。それをConvertメソッドの1つに送信することができます。これは、ソースと要求されたタイプの間でサポートされていると仮定して変換を行います。だから、読者のGetStringのすべての呼び出しをGetValueに変更してください。

関連する問題