2011-10-11 40 views
0

在过去的某个时候,在我的VB6时代,我记得能够创建一个sql命令对象(不一定与今天的.NET flavor相同),并自动获得sql参数填充进来。查找SQLCommand的SQLParameters

这让我做一些事情,比如只传递我肯定知道存在的参数,如果两个不同的客户端使用不同版本的数据库,我可以调用我的过程,知道我仍然会得到有意义的回应

事情是这样的:

Dim cmd as SqlCommand 
Set cmd = New SqlCommand(Connection) 
cmd.CommandText = "MagicStoredProcedure" 
cmd.CommandType = CommandType.StoredProcedure 
If cmd.Parameters.Count > 0 Then 
    If cmd.Parameters(0).Name = "@FirstParameter" Then 
     cmd.Parameters("@FirstParameter").Value = someValue 
    End If 
End If 
Dim r as Recordset 
Set r = cmd.ExecuteRecordset() 

我记得这样做,但我无法找到我自己的任何例子,试图做到这一点.NET中似乎并没有在所有的工作。我见过的所有例子(以及我搜索了一段时间)手动添加参数。

任何指针?

回答

0

我找到了SQLCommandBuilder.DeriveParameters过程,它正是我想要的。

SQLCommandBuilder.DeriveParameters(cmd) 
If cmd.Parameters.Contains("@FirstParameter") Then 
    cmd.Parameters("@FirstParameter").Value = someValue 
End If 

虽然没有我期待的地方。我期望烘焙到Command对象或Parameters集合中。

+1

你不需要参数名称中的'@'前缀吗? –

+0

@Uri你是绝对正确的。固定。 – Jonathan

-1

有一个模板解决方案,我过去曾使用过数据库访问,它使用一个类的属性映射到存储过程变量并在需要时动态构建字符串。

Look here for an explanation

它看起来非常相似,你会得到什么,当你使用Visual Studio时,从连接的数据库中添加存储过程和表到项目中。

也许它可以指引你在正确的方向。

+0

谢谢克里斯,但我看不到你的示例代码从服务器获取参数。它似乎依赖于你将它们手动添加到你的班级。 – Jonathan

+0

是的。我明显误解了,我的歉意。 – ChrisBD