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

来源:互联网 发布:使命召唤ol 电鳗数据 编辑:程序博客网 时间:2024/05/29 16:08

在业务代码中,可以将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"]得到返回的结果。

原创粉丝点击