我有一个SQL Server数据库,其中包含表QC
和列A, B, C, D, E,
Comment
。
我想做的是从列中读取数据并将其显示在标签中。但是并非所有列中都总是有数据。
预期输出为:
2.5|2.1
如果仅在A和B列中有数据。但我得到:
2.5|2.1| |||||
这是我的代码:
SqlCommand cmd = new SqlCommand("SELECT TOP 1 * FROM [TableQC] ORDER BY id DESC", conn);
SqlDataReader reader = cmd.ExecuteReader();
string temp = "";
string temp1 = "";
while (reader.Read())
{
temp += reader["A"].ToString() + "|";
temp += reader["B"].ToString() + "|";
temp += reader["C"].ToString() + "|";
temp += reader["D"].ToString() + "|";
temp += reader["E"].ToString() + "|";
temp1 += reader["Comment"].ToString();
//temp += "<br/>";
}
conn.Close();
label1.Text = temp;
label2.Text = temp1;
答案 0 :(得分:1)
正如Mong Zhu指出的那样,请在读取列值时进行检查:
if (!string.IsNullOrEmpty(reader.GetString("A")))
这将测试每列的空值并将其替换为空字符串。
为避免在结尾使用悬空的|
分隔符,请使用Join()
while (reader.Read())
{
// create an array big enough to hold all columns
object[] qc = new object[reader.FieldCount];
// iterate over all columns of your reader
for (int i = 0; i < reader.FieldCount; i++)
{
if (reader[i] == reader["Comment"])
{
label2.Text = reader.GetSqlString(i).IsNull ? null : reader.GetSqlString(i).Value;
}
else
{
// add to array
qc[i] = reader.GetValue(i);
}
}
label1.Text = string.Join("|", qc.OfType<string>());
}
但是,似乎并没有说出A,B等列的实际数据类型,并假设它们是字符串/字符数据类型,结果却是错误的。
根据您的实际数据类型,您将必须将过滤的Linq查询编辑为实际类型,例如qc.OfType<decimal>()
,或者仅过滤空值(例如qc.Where(v => !(v is DBNull))
。)
答案 1 :(得分:1)
您可以在查询中执行此操作。基本上,您需要concat_ws()
,但是在SQL Server中不可用。相反:
SELECT TOP 1 STUFF( (COALESCE('|' + A, '') +
COALESCE('|' + B, '') +
COALESCE('|' + C, '') +
COALESCE('|' + D, '') +
COALESCE('|' + E, '') +
COALESCE('|' + Comment, '')
), 1, 1, ''
) as abcde
FROM [TableQC]
ORDER BY id DESC
答案 2 :(得分:0)
感谢大家为我提供帮助并解决了我的问题。这是对我有用的代码:
SqlCommand cmd = new SqlCommand("SELECT TOP 1 * FROM [TableQC] ORDER BY id DESC", conn);
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
// create an array big enough to hold all columns
object[] qc = new object[reader.FieldCount];
// iterate over all columns of your reader
for (int i = 0; i < reader.FieldCount; i++)
{
if (reader[i] == reader["Comment"])
{
lblMessage1.Text = reader.GetSqlString(i).IsNull ? null : reader.GetSqlString(i).Value;
}
else
{
// add to array
qc[i] = reader.GetValue(i);
}
}
lblMessage.Text = string.Join("|", qc.OfType<double>());
}
conn.Close();
再次感谢您。