[英]Calling stored procedure from code-behind
点击这里看表我写了一个存储过程来获取表值。 但是我不知道如何编写C#代码来调用存储过程。 我想在控制台中运行它。
我的存储过程:
alter procedure sampleone (@createdOn nvarchar(200))
as
begin
select *
from sa_test
where createdOn = @createdOn
end
示例试用代码:
try
{
string connectionString = "(CString)";
string commandText = "sampleone";
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(commandText, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@createdOn",25/10/2017);
cmd.CommandTimeout = 600;
conn.Open();
int affectedRows = cmd.ExecuteNonQuery();
conn.Close();
}
}
catch
{
}
应用程序配置文件
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="CString" connectionString="data source=34.193.27.161;User Id=sa; Pwd=RCK$1234; Initial Catalog=rs" providerName="System.Data.SqlClient"/>
</connectionStrings>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
</configuration>
谁能帮我获取 C# 代码?
Soo,根据您真正想要的内容,您的脚本可能会有所不同。 但是,您应该真正考虑要将逻辑放在哪里。 你想让你的存储过程插入数据还是想让 C# 来做? 否则,这里是一个示例,其中您的存储过程用于插入数据:
笔记
由于我住在另一个国家/地区,我的日期完全不同 - 只需将日期更改回您想要的结果和日期格式。
笔记2
考虑将存储过程中的 createdON 变量设置为日期,而不是 nvarchar。
SQL 代码
--Build table for test inserts
CREATE TABLE dbo.testtable (
Name nvarchar(50),
Createdon date
)
--Insert dummy values to sa_test
INSERT INTO sa_test
values('Thomas','2017-10-10'),
('Hans','2017-12-25')
--Edit stored procedure to not just select but also insert data based on @createdOn variable
create procedure sampleone (@createdOn nvarchar(200))
as
begin
insert into testtable (Name,createdon)
select *
from sa_test
where createdon= @createdOn
end
C# 代码
string conn = "Server=EGC25199;Initial Catalog=LegOgSpass;Integrated Security=True";
string query = "sampleone";
SqlConnection connDatabase = new SqlConnection(conn);
connDatabase.Open();
SqlCommand cmd = new SqlCommand(query, connDatabase);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@createdOn", SqlDbType.Date).Value = "2017-10-10";
cmd.ExecuteNonQuery();
connDatabase.Close();
带有数据表的 C# 代码并打印到控制台
string conn = "Server=EGC25199;Initial Catalog=LegOgSpass;Integrated Security=True";
string query = "sampleone";
DataTable dt = new DataTable();
SqlConnection connDatabase = new SqlConnection(conn);
connDatabase.Open();
SqlCommand cmd = new SqlCommand(query, connDatabase);
using (var da = new SqlDataAdapter(cmd))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@createdOn", SqlDbType.Date).Value = "2017-10-10"; //Adding the selected items to parameter @check
cmd.ExecuteNonQuery();
da.Fill(dt);
foreach( DataRow row in dt.Rows)
{
Console.WriteLine();
for (int x = 0; x < dt.Columns.Count; x++)
{
Console.Write(row[x].ToString() + " ");
}
}
}
connDatabase.Close();
结果
我的测试表一开始是空的
sa_test 表有 2 个我可以选择的值
当我然后运行我的脚本时,我的测试表如下所示:
cmd.Parameters.AddWithValue("@createdOn",25/10/2017);
应该是这样的,然后尝试:
cmd.Parameters.AddWithValue("@createdOn","25/10/2017");
您需要使用ExecuteReader
从 SP 获取返回数据。 传递参数时也有TYPO。
cmd.Parameters.AddWithValue("@createdOn","25/10/2017");
更新代码
using (SqlConnection conn = new SqlConnection(connectionString))
{
SqlCommand cmd = new SqlCommand(commandText, conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@createdOn","25/10/2017");
cmd.CommandTimeout = 600;
conn.Open();
var reader = cmd.ExecuteReader();
while (reader.Read())
{
}
conn.Close();
}
你可以遵循这个简单的技术:
try
{
string connectionString = ConfigurationManager.ConnectionStrings["CString"].ConnectionString);
string commandText = "sampleone";
DataTable table = new DataTable();
using(var con = new SqlConnection(connectionString))
using(var cmd = new SqlCommand(commandText, con))
using(var da = new SqlDataAdapter(cmd))
{
cmd.Parameters.Add("@createdOn", SqlDbType.NVarChar, 50).Value = "25/10/2017";
cmd.CommandType = CommandType.StoredProcedure;
da.Fill(table);
}
}
catch
{
}
使用上面的代码,您的存储过程数据将被填充到数据table
。 然后,您可以将此table
用于各种用途,例如处理数据、将数据填充到数据网格中等。这种技术的另一个好处是,您甚至不需要打开/关闭连接。 这将由DataAdapter da
隐式完成
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.