c#:如何创建一个null INT作为SQL参数



我声明了一些变量,然后是

我使用switch命令循环浏览一些数据,如果存在属性,就会将其分配给相关变量可能找不到年龄PostgreSQL表反映了这个

CREATE my_table(
id SERIAL PRIMARY KEY,
name varchar,
age INTEGER
);

代码片段给我错误

  1. 使用未分配的局部变量"年龄">
  2. 参数2:无法从"out int?"转换到"out int">
  3. 无法将类型"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();
}
}     

我在您的代码中看到两个问题:

  1. 您正在尝试使用具有可为null的int的int.TryParse((
  2. 您正试图将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();
}
}  

相关内容

最新更新