C# sqlserver stored procedure 问题请教

最大赞力
0.00
当前赞力
100.00%
1. 获取返回的数据到DataSet中:
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(da);
2. C#获取OUTPUT参数是:cmd.Parameters["@total"].Value, cmd.Parameters["@totalAmt"].Value
3. 你可以把后两句合并成一句这样减少一次查询:SELECT @total = count(*), @totalAmt = sum(amount) FROM bills
4. WPF没用过
 
最大赞力
0.54
当前赞力
100.00%
1. 获取返回的数据到DataSet中:
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(da);
2. C#获取OUTPUT参数是:cmd.Parameters["@total"].Value, cmd.Parameters["@totalAmt"].Value
3. 你可以把后两句合并成一句这样减少一次查询:SELECT @total = count(*), @totalAmt = sum(amount) FROM bills
4. WPF没用过
谢谢,
我现在就是用的3, 觉得有点笨,
 

vickyzyd

怎样把5万变成50万,再把50万变成100万
最大赞力
0.00
当前赞力
100.00%
我的第一感觉是用linq, 把bills table拖到dbml的文件里,然后直接用linq访问table读取参数就行了,省去了定义dataset和store procedure的麻烦,以后需要别的table也方便,都拖进dbml,就行
具体的过程你可以看这里,我也不经常自己写C#, 都是用到了就去google一下,大概概念是了解的
http://msdn.microsoft.com/en-us/library/bb918069.aspx
 
最后编辑: 2014-12-17
最大赞力
0.00
当前赞力
100.00%
我的第一感觉是用linq, 把bills table拖到dbml的文件里,然后直接用linq访问table读取参数就行了,省去了定义dataset的麻烦,以后需要别的table也方便,都拖进dbml,就行
具体的过程你可以看这里,我也不经常自己写C#, 都是用到了就去google一下,大概概念是了解的
http://msdn.microsoft.com/en-us/library/bb918069.aspx

恩,用EF的话,这些存储过程都可以不用写了
Entity Framework 是个好东西
 

vickyzyd

怎样把5万变成50万,再把50万变成100万
最大赞力
0.00
当前赞力
100.00%
恩,用EF的话,这些存储过程都可以不用写了
Entity Framework 是个好东西

我说的主要是用linq访问database
EF(Entity Framework)是什么,是不是说DBML这样的文件用的是EF的structure? 可能因为我的主业不是编程,所以理解的不深刻,看了wiki还是一头雾水,前辈能不能给解释解释,先谢过了
 
最大赞力
0.00
当前赞力
100.00%
我说的主要是用linq访问database
EF(Entity Framework)是什么,是不是说DBML这样的文件用的是EF的structure? 可能因为我的主业不是编程,所以理解的不深刻,看了wiki还是一头雾水,前辈能不能给解释解释,先谢过了

简单的说,EF就是把数据库中的Table映射为程序中的Object

LINQ只是用来在语言中对数据进行查询的一种方式。具体查询的时候,可以用LINQ,也可以用Lambda Expression
 
最大赞力
0.54
当前赞力
100.00%
不懂,请指教
con.Open();
// Calling the Stored Procedure
SqlCommand cmd = new SqlCommand("sp_GetPromise", con);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@From", dpFrom.SelectedDate);
cmd.Parameters.AddWithValue("@To", dpTo.SelectedDate);
cmd.Parameters.AddWithValue("@total", total).Direction = ParameterDirection.Output;
cmd.Parameters.AddWithValue("@totalamt", totalamt).Direction = ParameterDirection.Output;
SqlDataAdapter adapter = new SqlDataAdapter(cmd);
DataTable dt = new DataTable("");
con.Close();
adapter.Fill(dt);
dgPromiseList.ItemsSource = dt.DefaultView;

我怎么得不到total,
这个SqlDataAdapter adapter = new SqlDataAdapter(cmd); 跟 cmd.ExecuteNonQuery(); 是不是一个效果?

我回头把sp贴出来, 你帮我看看。
 
最大赞力
0.54
当前赞力
100.00%
ALTER PROCEDURE [dbo].[sp_GetPromise]
@From datetime = null,
@To datetime = null,
@CustID int = 0,
@agent NVARCHAR(50)=null,
@total int OUTPUT,
@totalAmt money OUTPUT
AS
BEGIN
DECLARE
@sql NVARCHAR(4000)=null,
@sqldate NVARCHAR(1000)=null,
@sqlAgent NVARCHAR(1000)=null,
@sqltotal NVARCHAR(1000)=null,
@sqltotalamt NVARCHAR(1000)=null

SET @sql = 'SELECT [ID]
,[CustomerID]
,[OrderID]
,[CName]
,[Name]
,[PDate]
,[AmountDue]
,[AmountPromised]
,[Method]
,[Ref]
,[Notes]
,[Agent]
,[datetime]
,[computer]
,[WritingAgent]
FROM [ype_new_old].[dbo].[Promise]
WHERE Del is null'
SET @sqltotal = N'SELECT @total = COUNT(*) FROM [ype_new_old].[dbo].[Promise] WHERE Del is null'
SET @sqltotalamt = N'SELECT @totalamt = sum(AmountPromised) FROM [ype_new_old].[dbo].[Promise] WHERE Del is null'

IF (@CustID = 0)
BEGIN
if (@agent is not null)
SET @sqlAgent = ' AND [WritingAgent] = '+CHAR(39) + @agent+CHAR(39)
ELSE SET @sqlAgent = ' '
if (@From is not null)
SET @sqldate = ' AND PDate >= '+CHAR(39) + CAST(@From as VARCHAR(20)) +CHAR(39)
ELSE SET @sqldate = ' '
if (@To is not null)
SET @sqldate += ' AND PDate <= ' +CHAR(39)+ CAST(@To as VARCHAR(20))+CHAR(39)

SET @sql = @sql + @sqlAgent + @sqldate
SET @sqltotal = @sqltotal + @sqlAgent + @sqldate
SET @sqltotalamt = @sqltotalamt + @sqlAgent + @sqldate
END
ELSE
BEGIN
SET @sql = @sql + ' AND [CustomerID] = ' + CONVERT(varchar(9), @CustID)
SET @sqltotal = @sqltotal + ' AND [CustomerID] = ' + CONVERT(varchar(9), @CustID)
SET @sqltotalamt = @sqltotalamt + ' AND [CustomerID] = ' + CONVERT(varchar(9), @CustID)
END

EXEC sp_executesql @query0 = @sql

EXEC sp_executesql
@query = @sqltotal,
@params = N'@total INT OUTPUT',
@total = @total OUTPUT

EXEC sp_executesql
@query1 = @sqltotalamt,
@params1 = N'@totalamt money OUTPUT',
@totalamt = @totalamt OUTPUT

END
 

Similar threads

家园推荐黄页

家园币系统数据

家园币池子报价
家园币最新成交价
家园币总发行量
加元现金总量
家园币总成交量
家园币总成交价值

池子家园币总量
池子加元现金总量
池子币总量
1池子币现价
池子家园币总手续费
池子加元总手续费
入池家园币年化收益率
入池加元年化收益率

微比特币最新报价
毫以太币最新报价
微比特币总量
毫以太币总量
家园币储备总净值
家园币比特币储备
家园币以太币储备
比特币的加元报价
以太币的加元报价
USDT的加元报价

交易币种/月度交易量
家园币
加元交易对(比特币等)
USDT交易对(比特币等)
顶部