使用 windows 服务获取行数

Take row count using windows service

我是 ASP.Net 的新手。我最近有一个项目需要使用 windows 服务读取数据库。在将该记录写入数据库之前,我需要检查数据库是否存在记录。我不知道该怎么做。谁能提供简单的示例代码就太好了。

string strConn = ConfigurationManager.ConnectionStrings["MyDBConfig"].ConnectionString;

        SqlConnection oSqlConnection = new SqlConnection(strConn);
        oSqlConnection.Open();

        string commandText = @"SELECT COUNT (*) FROM csvs WHERE Agency='BBB'";

        using (var command = new SqlCommand(commandText, oSqlConnection))
        {
            command.ExecuteNonQuery();
        }

有效的方法是使用 StoredProcedure。您应该学习使用 StoredProcedures 进行 complex/multi 行查询。由于您是 .net 的新手以及此处场景中的所有这些,您的代码应如下所示:-

string strConn = ConfigurationManager.ConnectionStrings["MyDBConfig"].ConnectionString;

        SqlConnection oSqlConnection = new SqlConnection(strConn);
        oSqlConnection.Open();

var sql= "if not exists(Select count(id) from csvs where Agency=@agency) begin 
insert into csvs(columnA,columnB) values('abcd','efgh') end";


        using (var command = new SqlCommand(sql, oSqlConnection))
        {
command.Parameters.AddWithValue("@agency",agency);
            command.ExecuteNonQuery();
        }

您的代码就快完成了。您只需要实际读取 SQL 查询结果的部分。 ExecuteNonQuery 仅执行查询但不会 return 结果(它会 return UPDATEINSERT 和 [=14= 的受影响行数],但简单的 select 不会影响任何行)。

此代码执行查询并检查 return 值是否大于零。

    bool recordExists = false;
    string strConn = ConfigurationManager.ConnectionStrings["MyDBConfig"].ConnectionString;

    SqlConnection oSqlConnection = new SqlConnection(strConn);
    oSqlConnection.Open();

    string commandText = @"SELECT COUNT (*) FROM csvs WHERE Agency='BBB'";

    using (var command = new SqlCommand(commandText, oSqlConnection))
    {
        int recCnt = Convert.ToInt32(command.ExecuteScalar());
        if (recCnt > 0)
             recordExists = true;
    }

注意:ExecuteScalar() return 是 System.Object 类型的对象。实际类型 returned 取决于查询,在您的情况下,某些数字类型取决于 OleDb 驱动程序。 Convert.ToInt32() 将 return 值转换为 int,然后您可以将其签入代码。 Convert.ToInt32() 优于 (int) 的显式转换,因为 Convert.ToInt32() 也适用于其他数字类型。在这种特定情况下,显式转换可能会完全相同。