我有一个方法来检查表中是否存在id
,以及是否插入到另一个数据库表中;另外我有标签,显示输入的数据。插入数据库并从数据库中选择的查询工作正常;但我的问题是我无法count
,只能在任何时候收到1。它没有递增;我的问题如何让计数器增加而不是一直显示1。这就是我到目前为止所拥有的
protected void btnComplete_Click(object sender, EventArgs e)
{
string id = txtid.Text;
string user = lblUsername.Text;
string date = lblDate.Text;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["TWCL_OPERATIONSConnectionString"].ToString());
//commands identifying the stored procedure
SqlCommand cmd = new SqlCommand("selectId", conn);
SqlCommand cmd1 = new SqlCommand("CreateUserId", con);
// execute the stored procedures
cmd.CommandType = CommandType.StoredProcedure;
cmd1.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@id", id);
conn.Open();
using (SqlDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
cmd1.Parameters.Add("@id", SqlDbType.NVarChar).Value = barcode);
cmd1.Parameters.Add("@Username", SqlDbType.NVarChar).Value = user;
cmd1.Parameters.Add("@Date", SqlDbType.DateTime).Value = date;
counter = counter + 1;
}
reader.Close();
cmd1.ExecuteNonQuery();
lblCount.Text = counter.ToString();
}
else
{
lblError.Text = barcode + " does not exist!!";
}
}
答案 0 :(得分:1)
在您被要求stored procedures
之前,在给出具体答案之前,您应该修复代码中的一些问题
1)使用using{}
和command
connection
块来确保它们被处置。
2)在while
循环中,您要向cmd1
添加参数。想想如果while
循环运行超过1次会发生什么!!
现在,如果你想在计数器中显示max
,只需从数据库中获取max
!!
在
cmd
对象中,您向存储过程发送了一些ID
。如果您的表中id是唯一的,它将始终返回1条记录。
所以你的计数器总是1
<强>解决方案强>
不修改大部分代码,在存储过程的查询中添加count(id) as counter
,返回cmd的结果。
并在while
循环中指定计数变量。
counter = Convert.ToInteger(reader[“counter”].ToString());
上面不是最佳解决方案。因为它会
count
记录所有行,并会随着时间的推移而降低性能。
要获得最佳解决方案,您需要创建另一个执行command
select count(id) from YourTableName
对象
这将为您提供表格中的记录数量。
修改强>
来自你的评论。 从cmd1插入后,您只需要总记录。 只需做以下事情:
1)在cmd 1的storedProcedure中,写下Select Isnull(count(*),0) from YourTableNameHere
2)在您的代码中,使用ExecuteScalar
代替ExecuteNonQuery
。
var result = cmd1.ExecuteScalar();
lblCount.Text = result.ToString();
修改2
您希望跟踪当前session
中插入的记录数。使用viewstate
或session
,具体取决于您为session
保存计数器的要求,或仅保留当前页面上的用户。
var recordsAdded = cmd1.ExecuteNonQuery();
if(Session[“counter”] == null)
{
Session[“counter”] = 0;
}
if(recordsAdded>0)
{
Session[“counter”] = Convert.ToInteger(Session[“counter”]) + 1;
}
lblCount.Text = Session[“counter”];
以上将跟踪会话中插入的记录