【问题标题】:SQL Server : change NULL to blank on select statement for all columnsSQL Server:在所有列的选择语句上将 NULL 更改为空白
【发布时间】:2017-07-20 17:04:55
【问题描述】:

我正在通过我的 Web API 调用 SQL Server 数据库,然后将数据发送到我的网页,唯一的问题是当它执行某些值时,某些值为 null 并且出现错误。

我将如何做到这一点,当我使用 SQL 提取数据时,我会检查每一列和每一行是否有空值并将它们更改为 '' 而无需编写 ISNULL(a.BuildingNumber, '') 或者我是否试图尝试一些不是可能。

或者是否可以循环遍历我在 C# 从 SQL Server 获取数据时创建的 DataTable,如果可以,则可以使用类似 foreach 循环的方法。

using(SqlCommand cmd = new SqlCommand(query, con))
            {
                cmd.CommandType = CommandType.Text;
                var dtb = new DataTable();
                var da = new SqlDataAdapter(cmd);
                da.Fill(dtb);
                return Json(dtb);
            }

这就是我在查询返回它之后所做的。

【问题讨论】:

  • 您使用什么来与数据库交互,是纯 ADO.Net 还是使用 ORM?可以为空的数据类型有哪些?
  • 我相信您会将数据库中的数据映射到可以进行此更改的对象。
  • @Joe_DM ADO.Net 和可为空的数据类型都是字符串,但我的网页不能使用空值。
  • @Praveen 我对 C# 还很陌生,我该怎么做呢
  • 另外,你要返回什么?例如。您是否从数据读取器中手动读取和解析值

标签: c# sql-server asp.net-web-api


【解决方案1】:

您可以通过以下方式查看

string ServiceName = reader["ColumnNameFromQuery"] != System.DBNull.Value ? reader["ColumnNameFromQuery"].ToString() : "";

一个例子

                string QueryGetData = "select Name as Name , Age as Age from tableone;";

                        SqlCommand cmd = m_SqlConnection.CreateCommand();
                        cmd.CommandType = CommandType.Text;
                        cmd.CommandText = QueryGetData;
                        SqlDataReader reader = cmd.ExecuteReader();
                        while (reader.Read())
                        {
                            List<string> Data = new List<string>();

                            string strName = reader["Name"] != System.DBNull.Value ? reader["ServiceName"].ToString() : "";
            string strName = reader["Age"] != System.DBNull.Value ? reader["Age"].ToString() : "";

           //If Int Set Default as Zero
            int nIntValue = reader["IntColumnName"] != System.DBNull.Value ? Convert.ToInt32(reader["IntColumnName"].ToString()) : 0;

            }

【讨论】:

  • 我不需要对每一列都这样做吗?
  • 是的,恐怕是这样。
  • 你知道怎么做datareader吗??当我在看一个可扩展的系统时,我不必编辑每个部分来更新一件事
  • 我将添加我的示例查询以及我如何做以供参考。如果您觉得有用,请使用它。
  • 这可以通过以下方式更轻松地完成:'string ServiceName = reader["ColumnNameFromQuery"] as string ??字符串。空;'并且由于所有列都是字符串,因此可以将其放入循环中
【解决方案2】:

我通过在我的 javascript 中这样做得到了想要的结果

getData() {
    var search_url = "http://10.0.1.96/testwebapi/api/case/"
        + this.state.ApiUrl + "/" + this.props.match.params.id

    var _this = this;
    this.serverRequest =
        axios
            .get(search_url)
            .then(function (result) {
                for (var property in result.data[0]) {
                    if (result.data[0][property] === null) {
                        result.data[0][property] = '';
                    }
                }    
                _this.setState({
                    [_this.state.ApiUrl]: result.data[0]
                }, function () {
                });

            });
}

【讨论】:

    猜你喜欢
    • 2013-07-31
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 2019-03-06
    相关资源
    最近更新 更多