Linq到SQl存储过程问题(它无法弄清楚返回类型)

时间:2010-05-20 19:16:44

标签: sql-server sql-server-2005 linq-to-sql stored-procedures

我有这个SP

USE [Test]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[UsersInsert](@UpdatedProdData XML)
AS 
 INSERT INTO 
      dbo.UserTable(UserId,UserName,LicenseId,Password,PasswordSalt,Email,IsApproved,IsLockedOut,CreateDate,
      LastLoginDate,LastLockOutDate,FailedPasswordAttempts,RoleId)
      SELECT
         @UpdatedProdData.value('(/ArrayOfUsers/Users/UserId)[1]', 'uniqueidentifier'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/UserName)[1]', 'varchar(20)'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/LicenseId)[1]', 'varchar(50)'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/Password)[1]', 'varchar(128)'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/PasswordSalt)[1]', 'varchar(128)'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/Email)[1]', 'varchar(50)'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/IsApproved)[1]', 'bit'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/IsLockedOut)[1]', 'bit'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/CreateDate)[1]', 'datetime'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/LastLoginDate)[1]', 'datetime'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/LastLockOutDate)[1]', 'datetime'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/FailedPasswordAttempts)[1]', 'int'),
         @UpdatedProdData.value('(/ArrayOfUsers/Users/RoleId)[1]', 'int')

现在这个SP创建得很好。这是我去VS2010并尝试在我的linq的方法面板中将此SP拖动到设计视图中的sql文件。

它告诉我它无法弄清楚返回类型。我尝试去属性,但它没有“无”作为选择,我不能输入。它应该是“无”,那么如何将其设置为“无”?

2 个答案:

答案 0 :(得分:1)

您是否有任何特殊原因需要从Linq-to-SQL模型中调用它?

我会采取务实的态度:

  • Linq-to-SQL非常适合检索,处理,更新单个记录或小型数据集
  • 对于批量加载和/或类似的东西 - 为什么还要把它压缩到Linq-to-SQL?刚刚新建一个SqlConnection,一个SqlCommand,并执行存储过程....

UPDATE:从直接调用ADO.NET调用存储过程,您可以使用标准的ADO.NET内容作为任何有关.NET数据访问或ADO.NET教程的编程书籍(仅限Google)为此!)会教你:

using(SqlConnection con = new SqlConnection(your-connection-string-here))
{
     string sprocName = "UsersInsert";

     using(SqlCommand cmd = new SqlCommand(sprocName, con))
     {
         cmd.CommandType = CommandType.StoredProcedure;

         cmd.CommandType = System.Data.CommandType.StoredProcedure;

         SqlParameter param1 = new SqlParameter("@UpdateXml", SqlDbType.VarChar, int.MaxValue);
         param1.Value = YourXmlValueHere;
         cmd.Parameters.Add(param1);

         con.Open();
         int result = cmd.ExecuteNonQuery();
         con.Close();
     }    
}

当然,您可能希望将其包装到try ... catch块中以进行异常处理等等 - 但这基本上是您需要使用直接ADO.NET调用该存储过程的代码。

答案 1 :(得分:0)

您可以编辑.dbml的.designer.cs文件,只需编辑stor的返回值即可。 PROC。

并且您还应该使用右键单击.dbml文件,然后以xml打开以进行编辑。