从数据库中获取用户数

时间:2011-01-14 10:57:42

标签: .net asp.net sql vb.net .net-3.5

以下代码是否使用了良好做法?我想做的就是得到任何给定用户拥有的行数:

objSQLCommand = New SqlCommand("select count(id) as record_count from table1 where user = @strUser", objSQLConnection)
objSQLCommand.Parameters.Add("@strUser", SqlDbType.VarChar, 3).Value = strUser

objSQLCommand.Connection.Open()
objSQLDataReader = objSQLCommand.ExecuteReader()
objSQLDataReader.Read()

intRecordCount = objSQLDataReader("record_count")

objSQLDataReader.Close()
objSQLCommand.Connection.Close()

4 个答案:

答案 0 :(得分:3)

我建议:

  • 将命令转换为存储的命令 过程

  • 让SP将计数作为其返回 仅输出

  • 然后使用ExecuteScalar(不需要a 读取器)

  • 围绕连接使用环绕 命令妥善处理。

答案 1 :(得分:2)

由于您返回的是单个值,因此您只能使用ExecuteScalar而不是阅读器。

参见示例here

答案 2 :(得分:2)

为什么不使用LINQ to Entities?你的代码有时间扭曲感......

答案 3 :(得分:1)

根据@amelvin和@ChrisW的说法,这并不是一种糟糕的做法。和...

你可以在存储过程中包装你的sql查询,只有两行是不同的:

objSQLCommand = New SqlCommand("GetCountByUser", objSQLConnection);
objSQLCommand.CommandType = CommandType.StoredProcedure;

在设计说明中,您可以将用户引用保留为ID,而不是每行使用VarChar:

IE

<强> UsersTable
ID名称电子邮件
1 Oshirowanen Oshirowanen@hotmail.com
2 5arx 5arx@test.com
3 JeffA jeffattwood@stackexchange.com

<强> RecordTable
ID用户名OtherColumns
1234 1 Oshirenin 1
1235 1 Oshirenin 2
1236 2 5arx的专栏#1
1237 3杰夫阿特伍德来到这里 1238 2另一个5arx专栏

因此,您可以使用用户的数字ID调用(在存储过程或内联SQL中)。这种方法可以阻止您在记录表的每一行中复制用户名。