click here to see the table我写了一个存储过程来获取表值。但我不知道如何编写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
{
}
app.config
<?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#代码吗?
答案 0 :(得分:1)
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个我可以选择的值
当我运行我的脚本时,我的测试表看起来像这样:
答案 1 :(得分:0)
cmd.Parameters.AddWithValue("@createdOn",25/10/2017);
应该是这样并尝试:
cmd.Parameters.AddWithValue("@createdOn","25/10/2017");
答案 2 :(得分:0)
您需要使用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();
}
答案 3 :(得分:0)
你可以遵循这个简单的技术:
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