簡體   English   中英

將SQL Server數據轉換為Array時,特定類型轉換無效

[英]Specific cast is not valid while converting SQL Server data to Array

D B

數據庫:

我嘗試將SQL Server數據轉換為數組,但出現錯誤:

特定的強制轉換無效

這是我的代碼:

string query = "select part1,part2,part3 from Table_3 where id ='" + textBox1.Text + "'";
int[] arr = new int[] { };
SqlCommand cmd = new SqlCommand(query, con);

SqlDataReader myReader;

try
{
    con.Open();

    myReader = cmd.ExecuteReader();

    while (myReader.Read())
    {
        arr[i] = myReader.GetInt16(1);
        i = i+1;
    }

    con.Close();
    MessageBox.Show(arr[0].ToString());
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

這里有兩個問題。 最可能的直接問題是數據實際上不是Int16通常Int32int )更常見,因此GetInt16可能是錯誤的。

數組不可調整大小。 如果創建零長度數組,則它將始終為零長度 您不能為其添加任何值。

我覺得很奇怪 ,您正在閱讀四列,但僅消耗第二列-但這實際上不會導致失敗。

您似乎實際上只想要第一個值,而不是全部都需要-甚至需要一個數組嗎?

有一些與配置閱讀器有關的事情,但是很容易解決。

並且:永遠不要將輸入連接到SQL。

解決所有這些問題的最簡單方法是使用“ Dapper”之類的工具:

  • 它知道如何在原始類型之間進行轉換
  • 它使正確處理讀者變得容易
  • 它使正確正確設置輸入參數變得容易
  • 它使處理結果如列表,數組等變得容易
int[] arr = con.Query<int>("select part2 from Table_3 where id = @id",
    new { id = textBox1.Text }).ToArray();

或僅針對單個(第一個)結果:

int val = con.QueryFirst<int>("select part2 from Table_3 where id = @id",
    new { id = textBox1.Text });

注意:如果數據實際上定義為bit ,那么您將需要.NET中的bool / Boolean

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM