SQL Server一一执行ADO.NET命令,检索数据

 数据库应用程序的开发流程一般主要分为以下几个步骤:

  1. 创建数据库
  2. 使用Connection对象连接数据库
  3. 使用Command对象对数据源执行SQL命令并返回数据
  4. 使用DataReader和DataSet对象读取和处理数据源的数据

       建立与数据库连接后,就可以开始与它交互并利用它完成一些有用的事情,例如检索,添加,更新或者删除一些数据,或者以其他方式修改数据库。

      本章将介绍Command对象,这个对象封装了要执行的SQL语句,提供了把SQL提交给数据库的方法。

SqlCommand对象相关属性及主要方法

SQL Server一一执行ADO.NET命令,检索数据

SQL Server一一执行ADO.NET命令,检索数据

下面我们介绍一下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;
}