如何使用 C# 将 DBNull 转换为另一种类型?
How to convert DBNull into another type using C#?
我正在尝试编写一个代码,它会检查 DataGridView
中 select 行中的单元格是否为 empty/null,然后单元格将更新为一个值。我编写的代码不起作用,因为出现错误:
System.InvalidCastException: An object of type 'System.DBNull' cannot be converted to the 'System.String' type
我已经用这段代码试过了:
if ((string)dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value == null)
{
try
{
String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
SqlConnection myconnection = new SqlConnection(ConnectionString);
myconnection.Open();
DateTime primaryKey = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
SqlCommand AddNumbeCommand = myconnection.CreateCommand();
AddNumbeCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = @dato";
AddNumbeCommand.Parameters.AddWithValue("@ansatID", SqlDbType.Int).Value = textBox1.Text;
AddNumbeCommand.Parameters.Add("@dato", SqlDbType.DateTime).Value = primaryKey;
AddNumbeCommand.ExecuteNonQuery();
myconnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
MessageBox.Show("The cell is updated.");
}
}
else
{
MessageBox.Show("The cell has already a value.");
}
预期的结果是,当用户select在DataGridView
行的ansatID列下的单元格已经有值时,在textBox1中写入一个值,然后按''Tilføj ansatID til vagten'',他得到错误:"There is already a value in the cell."。如果他将 select 列 ansatID 下的单元格为空的行,在 textBox1 中写入一个值,然后按“'Tilføj ansatID til vagten'”,然后将执行 SQL 查询,他会收到消息"The cell is updated." 此外,ansatID 列的数据类型为"int"。这也显示在下图中:
(string)dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value == null
DBNull 不能直接转换为任何数据类型,因此您需要在转换前检查它是否为 DBNull
类似
if (dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value == DBNull.Value)
//dosomething
else
//do something else
或者根据您从数据库中读取它的方式,您可以使用 extension method 来节省一些打字时间
dataRow.Field<string>("Column Name")
回答你的问题,looks像DBNull一样可以通过两种方式转换:
首先,您可以 see,DBNull 可以使用 DBNull.ToString()
转换为字符串,这只是 returns 一个空字符串。
其次,由于 DBNull 实现了 IConvertible
接口,您可以通过提供 IFormatProvider
接口的实现来将 DBNull.ToType(Type, IFormatProvider)
to convert 用于另一种类型。
在您的例子中,我看到您将单元格值转换为字符串的唯一地方是在 if 条件中。
您正在使用它来确定单元格是否具有值。如果这就是你想要做的,那么这里的答案可能会更好地为你服务:How to check empty and null cells in datagridview using C#
我正在尝试编写一个代码,它会检查 DataGridView
中 select 行中的单元格是否为 empty/null,然后单元格将更新为一个值。我编写的代码不起作用,因为出现错误:
System.InvalidCastException: An object of type 'System.DBNull' cannot be converted to the 'System.String' type
我已经用这段代码试过了:
if ((string)dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value == null)
{
try
{
String ConnectionString = @"Data Source=.\SQLEXPRESS01;Initial Catalog=Vagtplan;Integrated Security=True";
SqlConnection myconnection = new SqlConnection(ConnectionString);
myconnection.Open();
DateTime primaryKey = Convert.ToDateTime(dataGridView1.SelectedRows[0].Cells[0].Value);
SqlCommand AddNumbeCommand = myconnection.CreateCommand();
AddNumbeCommand.CommandText = "UPDATE dbo.Vagter SET [ansatID] = @ansatID WHERE [Dato] = @dato";
AddNumbeCommand.Parameters.AddWithValue("@ansatID", SqlDbType.Int).Value = textBox1.Text;
AddNumbeCommand.Parameters.Add("@dato", SqlDbType.DateTime).Value = primaryKey;
AddNumbeCommand.ExecuteNonQuery();
myconnection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
MessageBox.Show("The cell is updated.");
}
}
else
{
MessageBox.Show("The cell has already a value.");
}
预期的结果是,当用户select在DataGridView
行的ansatID列下的单元格已经有值时,在textBox1中写入一个值,然后按''Tilføj ansatID til vagten'',他得到错误:"There is already a value in the cell."。如果他将 select 列 ansatID 下的单元格为空的行,在 textBox1 中写入一个值,然后按“'Tilføj ansatID til vagten'”,然后将执行 SQL 查询,他会收到消息"The cell is updated." 此外,ansatID 列的数据类型为"int"。这也显示在下图中:
(string)dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value == null
DBNull 不能直接转换为任何数据类型,因此您需要在转换前检查它是否为 DBNull
类似
if (dataGridView1.SelectedCells[0].OwningRow.Cells[1].Value == DBNull.Value)
//dosomething
else
//do something else
或者根据您从数据库中读取它的方式,您可以使用 extension method 来节省一些打字时间
dataRow.Field<string>("Column Name")
回答你的问题,looks像DBNull一样可以通过两种方式转换:
首先,您可以 see,DBNull 可以使用 DBNull.ToString()
转换为字符串,这只是 returns 一个空字符串。
其次,由于 DBNull 实现了 IConvertible
接口,您可以通过提供 IFormatProvider
接口的实现来将 DBNull.ToType(Type, IFormatProvider)
to convert 用于另一种类型。
在您的例子中,我看到您将单元格值转换为字符串的唯一地方是在 if 条件中。
您正在使用它来确定单元格是否具有值。如果这就是你想要做的,那么这里的答案可能会更好地为你服务:How to check empty and null cells in datagridview using C#