asp.net调用数据库存储过程的基本方法
c#使用数据库存储过程的基本方法
2007-05-28 16:58 440人阅读 评论(0) 收藏 举报
在业务代码中,可以将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"]得到返回
的结果。