使用 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 UPDATE
、INSERT
和 [=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()
也适用于其他数字类型。在这种特定情况下,显式转换可能会完全相同。
我是 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 UPDATE
、INSERT
和 [=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()
也适用于其他数字类型。在这种特定情况下,显式转换可能会完全相同。