我声明了一些变量,然后是
我使用switch命令循环浏览一些数据,如果存在属性,就会将其分配给相关变量可能找不到年龄PostgreSQL表反映了这个
CREATE my_table(
id SERIAL PRIMARY KEY,
name varchar,
age INTEGER
);
代码片段给我错误
- 使用未分配的局部变量"年龄">
- 参数2:无法从"out int?"转换到"out int">
- 无法将类型"System.DBNull"转换为"int">
如果不将值作为null传递给数据库,我如何声明null int并可能分配值?
IN伪代码显示我正在做的的要点
// declared at the same level
string name = string.Empty;
int? age;
foreach (var p in Feature.Properties)
{
var Key = p.Key;
var Value = p.Value;
switch (Key.ToLower())
{
case "name":
{
name = Value;
break;
}
case "age":
{
// May not exist
// Err 2
int.TryParse(Value, out age);
break;
}
}
}
// Err 1 name is OK
Console.WriteLine(name + age);
using (var DB_con = new NpgsqlConnection(cs))
{
var sql = "INSERT INTO my_table (name,age )VALUES "+
"(@p_name, @p_age RETURNING id;";
using (var cmd = new NpgsqlCommand(sql, DB_con))
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.AddWithValue("@p_name", name);
// Err 3
cmd.Parameters.AddWithValue("@p_age", age ?? (int)DBNull.Value );
DB_con.Open();
var res = cmd.ExecuteScalar();
DB_con.Close();
}
}
我在您的代码中看到两个问题:
- 您正在尝试使用具有可为null的int的int.TryParse((
- 您正试图将DBNull.Value强制转换为int
请尝试以下操作:
// declared at the same level
string name = string.Empty;
int? age;
foreach (var p in Feature.Properties)
{
var Key = p.Key;
var Value = p.Value;
switch (Key.ToLower())
{
case "name":
{
name = Value;
break;
}
case "age":
{
// May not exist
// Err 2
int parsedAge;
//try parsing into int, when sucessfull then assing value
if(int.TryParse(Value, out parsedAge))
{
age = parsedAge;
}
break;
}
}
}
// Err 1 name is OK
Console.WriteLine(name + age);
using (var DB_con = new NpgsqlConnection(cs))
{
var sql = "INSERT INTO my_table (name,age )VALUES "+
"(@p_name, @p_age RETURNING id;";
using (var cmd = new NpgsqlCommand(sql, DB_con))
{
cmd.CommandType = System.Data.CommandType.Text;
cmd.Parameters.AddWithValue("@p_name", name);
// Err 3
//remove casting into int
cmd.Parameters.AddWithValue("@p_age", age ?? DBNull.Value );
DB_con.Open();
var res = cmd.ExecuteScalar();
DB_con.Close();
}
}