【问题标题】:System.InvalidCastException: Specified cast is not valid at .ExecuteScalarSystem.InvalidCastException:指定的强制转换在 .ExecuteScalar 处无效
【发布时间】:2015-08-27 10:20:24
【问题描述】:

我正在开发一个链接到本地​​数据库的应用程序。我想要的是从数据库中以数据形式显示,但在标签中。我创建了一个标签列表,但在 command.Executescalar() 中出现此错误,我尝试获取在数据库中输入的行数,因此该列表可以创建确切的行数。谢谢!

int infoCount = (int)command.ExecuteScalar();
var pozitie = 50; //50 pixeli
for (var i = infoCount ; i >= 0; i--)
{
      //creez si adaug un nou label in form
       Label label = new Label();
       label.Text = dataTable.Rows[i][i].ToString();
       label.Location = new Point(pozitie, 150);
       label.AutoSize = true;

       //afisez in form
       //adaug in colectie
       labels.Add(label);

}

L.E:

var query = "SELECT * FROM grupe WHERE Nume='" + nume + "'";
var command = new SqlCeCommand(query, conn);
var dataAdapter = new SqlCeDataAdapter(command);
var dataTable = new DataTable();
dataAdapter.Fill(dataTable);

【问题讨论】:

  • 能否提供您正在使用的查询?
  • 鉴于错误在第一行,其余行无关紧要......但代码 before 该行 - 显示查询 - 将是 非常相关。此外,您可能希望将结果临时分配给 object 类型的变量并强制转换 that,这样您就可以看到结果类型实际上是什么...
  • 我猜你查询:SELECT * FROM TableName
  • 编辑了第一篇文章。

标签: c# sql local-database executescalar


【解决方案1】:

此查询返回的不是记录数:

SELECT * FROM grupe WHERE Nume=@nume

相反,它选择所有列,ExecuteScalar 它返回第一行第一列的值。相反,您想使用:

SELECT COUNT(*) FROM grupe WHERE Nume=@nume

同时使用sql-parameters(如上图)来防止sql注入。

using(var command = new SqlCeCommand(query, conn))
{
     command.Parameters.Add("@nume", SqlDbType.VarChar).Value = nume;
}

另请注意,在 C# 中索引为零,因此您可以通过 coll[0] 访问列表或数组中的第一项。最后一项位于coll.Count-1,因此您应该将 for 循环更改为:

for (int i = infoCount - 1 ; i >= 0; i--)
{
    // ...
}

但您根本不需要使用单独的查询来确定行数。您正在填写具有 table.Rows.Count 属性的 DataTable。所以很简单:

// ...
var dataTable = new DataTable();
dataAdapter.Fill(dataTable);
for(int i = dataTable.Rows.Count - 1; i >= 0; i--)
{
     DataRow row = dataTable.Rows[i];
    // ...
} 

【讨论】:

  • 位置 2 没有行.. 不知道为什么我得到这个。
  • @user3348368:我已经编辑了我的答案,使用var i = infoCount - 1 而不是var i = infoCount。但是你根本不需要这个查询,数据表已经知道它的大小了。
  • 工作,但它没有显示任何标签或文本,或类似的东西。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-09
  • 1970-01-01
  • 2017-06-29
  • 2013-08-27
相关资源
最近更新 更多