2012-07-09 108 views
-1

我有一个注册表格,我想检查用户以前没有注册过。防止用户注册两次

我的代码在下面。我认为存在两个问题:(1)调用方法和(2)将参数传递给存储过程。我的症状是,这导致一个异常,说输入参数未初始化。

create procedure fakeuser @username nvarchar(250),@codemeli nchar(10),@email  nvarchar(50), @user nvarchar(250) output,@code nchar(10)output,@mail nvarchar(50)output 
as 
if exists(select username,email,codemeli from karbar where [email protected]) 
set @[email protected] 
else if exists(select username,email,codemeli from karbar where [email protected]) 
set @[email protected] 
else if exists(select username,email,codemeli from karbar where [email protected]) 
set @mail= @email 

下面是C#代码:

public static string confirm(string username, string email, string codemeli) 
    { 
     string constring = "data source=.;database=site;integrated security=true;"; 
     SqlConnection connection = new SqlConnection(constring); 

     // Command - specify as StoredProcedure 
     SqlCommand command = new SqlCommand("fakeuser", connection); 
     command.CommandType = CommandType.StoredProcedure; 

     SqlParameter param = new SqlParameter("@username", SqlDbType.NVarChar); 
     param.Direction = ParameterDirection.Input; 
     param.Value = username; 
     command.Parameters.Add(param); 

     SqlParameter param2 = new SqlParameter("@email", SqlDbType.NVarChar); 
     param2.Direction = ParameterDirection.Input; 
     param2.Value = username; 
     command.Parameters.Add(param2); 

     SqlParameter param3 = new SqlParameter("@codemeli", SqlDbType.NChar); 
     param3.Direction = ParameterDirection.Input; 
     param3.Value = username; 
     command.Parameters.Add(param3); 

     // Return value as parameter 
     SqlParameter returnuser = new SqlParameter("@user", SqlDbType.NVarChar); 
     returnuser.Direction = ParameterDirection.ReturnValue; 
     command.Parameters.Add(returnuser); 

     SqlParameter returncode = new SqlParameter("@code", SqlDbType.NChar); 

     returncode.Direction = ParameterDirection.ReturnValue; 

     command.Parameters.Add(returncode); 
     SqlParameter returnmail = new SqlParameter("@mail", SqlDbType.NVarChar); 
     returnmail.Direction = ParameterDirection.ReturnValue; 
     command.Parameters.Add(returnmail); 

     // Execute the stored procedure 
     connection.Open(); 
     command.ExecuteNonQuery(); 
     connection.Close(); 

谢谢。

+1

究竟是什么不起作用?您需要使用Visual Studio调试器,SQL Server Management Studio和其他编程工具来确定哪部分代码导致了问题。如果您发现问题并找不到解决方法,我们很乐意为您提供帮助,但我认为您会发现大多数人不会为您找到问题所在。 – 2012-07-09 14:50:00

回答

1

为@ user,@ code和@mail设置ParameterDirection=Output,并指定参数的宽度/大小/长度。

SqlParameter returnuser = new SqlParameter("@user", SqlDbType.NVarChar,100); 
returnuser.Direction = ParameterDirection.Output; 
command.Parameters.Add(returnuser); 
+0

我这样做,但发生此异常 - > Size属性的无效大小为0. – quantum62 2012-07-09 14:57:34

+0

@ quantum62 - 您必须指定输出参数的** length **。 – adatapost 2012-07-09 15:06:10

+0

非常感谢,问题解决了 – quantum62 2012-07-09 15:12:31