SQL Server一一执行ADO.NET命令,检索数据
数据库应用程序的开发流程一般主要分为以下几个步骤:
- 创建数据库
- 使用Connection对象连接数据库
- 使用Command对象对数据源执行SQL命令并返回数据
- 使用DataReader和DataSet对象读取和处理数据源的数据
建立与数据库连接后,就可以开始与它交互并利用它完成一些有用的事情,例如检索,添加,更新或者删除一些数据,或者以其他方式修改数据库。
本章将介绍Command对象,这个对象封装了要执行的SQL语句,提供了把SQL提交给数据库的方法。
SqlCommand对象相关属性及主要方法
下面我们介绍一下SQL使用存储过程:
首先我们在SQL Server中创建存储过程proc_UserLogin:如下所示:
Create proc [dbo].[proc_UserLogin]
@p_User varchar(100),
@p_Password varchar(200),
@p_Type int
as
declare @CardID varchar(20), @Name varchar(50),
@Password varchar(20)
select @CardID = CardID, @Name = UserName,
@Password = LoginPwd
from UserLogin
where ((@p_Type = 0 and CardID = @p_User) or (@p_Type = 1 and UserName = @p_User))
if @@rowcount <= 0
begin
return -1;
end
if @Password != @p_Password
begin
return -2
end
select @CardID as CardID, @Name as Name, @Password as Password
return 0
接下来,我们使用代码运行存储过程:
/// <summary>
/// 执行返回查询结果的存储过程
/// </summary>
/// <param name="procname">存储过程名?</param>
/// <param name="param">参数。函数正常返回时,所有类型为out的参数值也在对应位置上</param>
/// <param name="result">返回查询的结果</param>
/// <returns>0正确,其他错误</returns>
public int ExecQueryStoreProc(string procname, ref SqlParameter[] param, out DataTable result)
{
if (!Connect())
{
result = null;
return -1;
}
try
{
SqlCommand command = new SqlCommand(procname, m_SqlConnection);
command.CommandType = CommandType.StoredProcedure;
if (m_Transaction != null)
command.Transaction = m_Transaction;
SqlParameter rvalue = command.Parameters.Add(new SqlParameter("RETURN_VALUE", SqlDbType.Int));
rvalue.Direction = ParameterDirection.ReturnValue;
if (param != null)
command.Parameters.AddRange(param);
result = new DataTable();
SqlDataReader reader = command.ExecuteReader();
if (reader.HasRows)
result.Load(reader);
return Convert.ToInt32(command.Parameters["RETURN_VALUE"].Value);
}
catch (Exception)
{
result = null;
return -1;
}
finally
{
DisConnect();
}
}
相关调用:
public bool Login(string str_ip, string str_db, ref string str_user, string str_pwd, int i_type, out string errmsg)
{
SQLServerAPI api = new SQLServerAPI(str_ip, str_db, m_User, m_Pwd);
SqlParameter[] param = new SqlParameter[3];
param[0] = new SqlParameter("p_User", str_user);
param[1] = new SqlParameter("p_Password", str_pwd);
param[2] = new SqlParameter("p_Type", i_type);
DataTable result;
int err = api.ExecQueryStoreProc("proc_UserLogin", ref param, out result);
if (err != 0)
{
switch (err)
{
case -1:
errmsg = MyRe.MSS_NOUSER;
break;
case -2:
errmsg = MyRe.MSS_WRONGPASSWORD;
break;
default:
errmsg = MyRe.MSS_UNKNOWNERROR;
break;
}
return false;
}
DataRow dr = result.Rows[0];
str_user = dr["CardID"].ToString();
errmsg = MyRe.MSS_SUCCESS;
return true;
}