c# - 我应该使用 isDbNull 吗?在这种特殊情况下如何使用它?
问题描述
我知道Null
值不能转换为字符串值,所以我查看了整个网络,确实找到了一些答案,比如使用IsDBNull()
,但我似乎无法让它工作。我是新手,所以请多多包涵。我只需要在适当TextBox
的""
时候填充可空字段,就像它是Null
. 如果您能帮我掌握正确的语法,那就太好了。可能是Null
(或不是)的字段是projects_project_number
,我回到我的原始代码来展示我开始的内容。这里是:
ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["shopmanagerConnectionString1"];
MySqlConnection con = new MySqlConnection(conSettings.ToString());
string Query = "select * from shopmanager.quotes where idquotes = @search_quote_number;";
MySqlCommand cmdDataBase = new MySqlCommand(Query, con);
MySqlDataReader myReader;
try
{
con.Open();
cmdDataBase.Parameters.AddWithValue("@search_quote_number", search_quote_number.Text);
myReader = cmdDataBase.ExecuteReader();
while (myReader.Read())
{
string sClient_number = myReader.GetString("client_info_client_number");
string sId = myReader.GetInt16("idquotes").ToString();
string sClientName = myReader.GetString("client_name");
string spredicted_start_date = myReader.GetString("predicted_start_date");
string sdate_required = myReader.GetString("requested_date");
string sdate_predicted = myReader.GetString("delivery_expected_date");
string sdate_received = myReader.GetString("date_received");
string squote_amount = myReader.GetString("quote_amount");
string sproject_number = myReader.GetString("projects_project_number");
quote_id.Text = sId;
client_name.Text = sClientName;
predicted_start_date.Text = spredicted_start_date;
date_required.Text = sdate_required;
date_predicted.Text = sdate_predicted;
date_received.Text = sdate_received;
quote_amount.Text = squote_amount;
project_number.Text = sproject_number;
temp_client_id.client_id = sClient_number;
search_quote_number.Text = "";
}
cmdDataBase.Parameters.Clear();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
con.Close();
解决方案
要使用DBNull ,请遵循 MSDN 上有关Is.DBNull()的指南
有多种使用方法,DBNull
但使用您在问题中提供的内容,最好的用途是:
string sproject_number = string.Empty;
if (!Convert.IsDBNull(myReader.GetString("projects_project_number"))) //check if value is not null
sproject_number = myReader.GetString("projects_project_number");
project_number.Text = sproject_number;
您还可以将内置函数用于SqlDataReader
.IsDBNull
:
int columnIndex = myReader.GetOrdinal("projects_project_number"); //get column index
string sproject_number = string.Empty;
if (!myReader.IsDBNull(columnIndex)) //check if value is not null
sproject_number = myReader[columnIndex].ToString();
project_number.Text = sproject_number;
为了完整性:
int columnIndex = myReader.GetOrdinal();
string sproject_number = string.Empty;
if (DBNull.Value.Equals(myReader.GetString("projects_project_number"))) //check if value is not null
sproject_number = myReader.GetString("projects_project_number");
project_number.Text = sproject_number;
评估原始帖子上关于直接分配给文本框并整理所有内容的评论(并将其添加到using
块中是一种很好的做法):
ConnectionStringSettings conSettings = ConfigurationManager.ConnectionStrings["shopmanagerConnectionString1"]
string Query = "select * from shopmanager.quotes where idquotes = @search_quote_number;";
using(MySqlConnection con = new MySqlConnection(conSettings.ToString()))
{
using(MySqlCommand cmdDataBase = new MySqlCommand(Query, con))
{
cmdDataBase.Parameters.AddWithValue("@search_quote_number", search_quote_number.Text.Trim());
con.Open();
var myReader = cmdDataBase.ExecuteReader();
if(myReader.Read())
{
temp_client_id.client_id = myReader.GetString("client_info_client_number");
quote_id.Text = myReader.GetInt16("idquotes").ToString();
client_name.Text = myReader.GetString("client_name");
predicted_start_date.Text = myReader.GetString("predicted_start_date");
date_required.Text = sdate_required = myReader.GetString("requested_date");
date_predicted.Tex = myReader.GetString("delivery_expected_date");
date_received.Text = myReader.GetString("date_received");
quote_amount.Text = myReader.GetString("quote_amount");
project_number.Text = DBNull.Value.Equals(myReader.GetString("projects_project_number")) ? "" : myReader.GetString("projects_project_number");
search_quote_number.Text = "";
}
}
}
推荐阅读
- ssl - 带 SNI 的本地 HTTPS 服务器
- spring - 在拒绝消息时设置 x-first-death-reason 或自定义标头(SpringAMQP)
- linux - gdb多线程调试如何配合Linux线程调度?
- android - 根据语言在 webview 中加载本地 HTML 文件,如果找不到文件,则使用默认值
- java - Java:计算字符串数组的第一个和最后一个字母中的重复
- c++ - 字符串和数组的问题
- json - 当键未知时如何从jmeter中的json中提取值?
- java - 使用 Batik 到 SVG 将 SVG 转换为 PNG 时 Linux 和 OSX 之间的文本差异
- kendo-grid - 如何删除剑道网格分组中的字段名称?
- javascript - SVG没有在浏览器上显示任何东西