c#使用数据库存储过程的基本方法

在业务代码中,可以将sql语句写成数据库的存储,这样代码会非常简洁,输入也不容易出错。更重要的是,存储过程可以写入多条的语句,对于需要得到数据库操作结果的模块非常有用。比如下面,要插入一条记录到数据库的最后一行,并且返回结果(插入的行号),如果用sql语句,要分成两次查询:

 ThisCommand.CommandText = "Insert into SmsOutSquence (Content, Terminal, State, UserId, SubmitTime) VALUES('" + smsContent + "','" + t + "','" + 0 + "','" + userId + "','" + nowTime + "')";
            SqlDataReader ThisReader = ThisCommand.ExecuteReader();
            ThisReader.Close();
            ThisCommand.CommandText = "SELECT * FROM SmsOutSquence WHERE SmsId = (SELECT max(SmsID) FROM SmsOutSquence)";
            ThisReader = ThisCommand.ExecuteReader();

非常麻烦。这个时候我们可以用存储过程来处理。

先要针对这个目的建立一个存储过程:

CREATE PROCEDURE CMPP30_SubmitNewSms
                 @smsContent varchar(140),
                 @t varchar(1100),
                 @userId varchar(100),
                 @nowTime datetime                
                        
 AS
              insert into SmsOutSquence
              (Content, Terminal, State, UserId, SubmitTime)
              VALUES(@smsContent,@t , 0 , @userId ,@nowTime)
              SELECT  @@IDENTITY as "smsIdentity"
GO

最后一行是通过系统变量IDENTITY得到新行的标识符。

然后在c#代码中,这样调用这个存储过程:

          SqlConnection ThisConnection = new SqlConnection(@"Server=(local);Integrated Security=True;" + "DataBase=SmsServerDatabase");
            ThisConnection.Open();
            SqlCommand ThisCommand = ThisConnection.CreateCommand();
            ThisCommand.CommandText = "CMPP30_SubmitNewSms";
            ThisCommand.CommandType = System.Data.CommandType.StoredProcedure;

            ThisCommand.Parameters.Add(new SqlParameter("@smsContent",System.Data.SqlDbType.VarChar));
            ThisCommand.Parameters.Add(new SqlParameter("@t",System.Data.SqlDbType.VarChar));
            ThisCommand.Parameters.Add(new SqlParameter("@userId",System.Data.SqlDbType.VarChar));
            ThisCommand.Parameters.Add(new SqlParameter("@nowTime",System.Data.SqlDbType.DateTime));
            ThisCommand.Parameters["@smsContent"].Value=smsContent;
            ThisCommand.Parameters["@t"].Value= t;
            ThisCommand.Parameters["@userId"].Value=userId;
            ThisCommand.Parameters["@nowTime"].Value=nowTime;

                
            SqlDataReader ThisReader = ThisCommand.ExecuteReader();
            while (ThisReader.Read())
            {
                index = Convert.ToInt64(ThisReader["SmsIdentity"].ToString().Trim());
            }
            Console.WriteLine(index);
            ThisReader.Close();
            ThisConnection.Close();

要传递的参数要先定义,并传值给它。最后用executeReader可以返回操作的结果。因为存储过程将结果表现为一个新列smsIdentity,所以可以用thisRead["smsIdentity"]得到返回的结果。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值