C# C的强制转换异常无效#
我正在用C#开发一个应用程序和一个MS Access 2007数据库 myTable有3列:数字(整数)、名称(长文本)、日期(日期) 我正在尝试从myTable中读取一个值(整数),并尝试将其存储到TOT中以执行其他操作。 但我仍然有一个错误C# C的强制转换异常无效#,c#,ms-access-2007,C#,Ms Access 2007,我正在用C#开发一个应用程序和一个MS Access 2007数据库 myTable有3列:数字(整数)、名称(长文本)、日期(日期) 我正在尝试从myTable中读取一个值(整数),并尝试将其存储到TOT中以执行其他操作。 但我仍然有一个错误 TOT=reader.GetInt32(x)表示“无效强制转换异常” 使用即时窗口,问题似乎出现在reader.GetInt32(x)中 代码如下: OdbcConnection conn = new OdbcConnection("Dsn=My_Acc
TOT=reader.GetInt32(x)代码>表示“无效强制转换异常”
使用即时窗口,问题似乎出现在reader.GetInt32(x)
中
代码如下:
OdbcConnection conn = new OdbcConnection("Dsn=My_Access_Database; Pwd=1234");
OdbcCommand cmd;
OdbcDataReader reader;
int TOT = 0;
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "Select SUM(Number) AS col1 From myTable WHERE Name = '" + label1.Text + "' AND Date=#" + label2.Text + "#;";
reader = cmd.ExecuteReader();
while (reader.Read())
{
int x= reader.GetOrdinal("col1");
if (reader.IsDBNull(x))
{
label3.Text = "0.0";
label4.Text = "0.0";
label5.Text = "0.0";
}
else
{
TOT = reader.GetInt32(x);
//Other things
}
}
OdbcConnection conn = new OdbcConnection("Dsn=My_Access_Database; Pwd=1234");
OdbcCommand cmd;
OdbcDataReader reader;
int TOT = 0;
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "Select SUM(Number) AS col1 From myTable WHERE Name = '" + label1.Text + "' AND Date=#" + label2.Text + "#;";
reader = cmd.ExecuteReader();
while (reader.Read())
{
int x= reader.GetOrdinal("col1");
if (reader.IsDBNull(x))
{
label3.Text = "0.0";
label4.Text = "0.0";
label5.Text = "0.0";
}
else
{
TOT = (int)(reader.GetInt32(x));
//Other things
}
}
当我在Access上执行查询时,它会工作并提供我想要的值。尝试使用TryParse
方法:
var result = reader.GetString(x);
int.TryParse(result, out TOT);
更新:
尝试将您的总和转换为int
:
cmd.CommandText = "Select CAST(SUM(Number) as INT) AS col1 From myTable WHERE Name = '"
+ label1.Text + "' AND Date=#" + label2.Text + "#;";
// the other code is omitted for the brevity
else
{
TOT = reader.GetInt32(x);
}
确定已解决:
看起来我的SUM(Number)返回了一个双精度值,即使该列是一个整型列并填充了整数值
因此,您应该将该值读取为双精度值,并将其转换为int。
代码如下:
OdbcConnection conn = new OdbcConnection("Dsn=My_Access_Database; Pwd=1234");
OdbcCommand cmd;
OdbcDataReader reader;
int TOT = 0;
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "Select SUM(Number) AS col1 From myTable WHERE Name = '" + label1.Text + "' AND Date=#" + label2.Text + "#;";
reader = cmd.ExecuteReader();
while (reader.Read())
{
int x= reader.GetOrdinal("col1");
if (reader.IsDBNull(x))
{
label3.Text = "0.0";
label4.Text = "0.0";
label5.Text = "0.0";
}
else
{
TOT = reader.GetInt32(x);
//Other things
}
}
OdbcConnection conn = new OdbcConnection("Dsn=My_Access_Database; Pwd=1234");
OdbcCommand cmd;
OdbcDataReader reader;
int TOT = 0;
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = "Select SUM(Number) AS col1 From myTable WHERE Name = '" + label1.Text + "' AND Date=#" + label2.Text + "#;";
reader = cmd.ExecuteReader();
while (reader.Read())
{
int x= reader.GetOrdinal("col1");
if (reader.IsDBNull(x))
{
label3.Text = "0.0";
label4.Text = "0.0";
label5.Text = "0.0";
}
else
{
TOT = (int)(reader.GetInt32(x));
//Other things
}
}
我猜想,SUM(Number)
正在返回一个double
或其他一些“非整数”类型。什么是Int?TOT是一种Int而不是Int的类型,你确定这是正确的吗?是的,绝对正确,在我的代码中它是Int,这里输入错误。整数之和是否可能返回非整数值?表示它无法从System.Double转换为System.String。所以我们得到的和(数)是双精度的。但Number是一个整数列,包含整数值。我猜SUM()
总是返回一个double类型,即使它只是对整数求和。所以我要做的是TOT=read.GetDouble(),然后将TOT转换为int?