2012-10-12 31 views
1

我得到的錯誤:未能參數值從SqlParameter的轉換爲字符串

Failed to convert parameter value from SqlParameter to String.

我通過:

TestUsername, 
TestPassword, 
TestFirstName, 
TestLastName, 
[email protected] 

代碼:

 try 
     { 

      Console.WriteLine("Inputs: Username, Password, First Name, Last Name, Email"); 
      Console.WriteLine("Username: "); 
      string usernameInput = Console.ReadLine(); 
      Console.WriteLine("Password: "); 
      string passwordInput = Console.ReadLine(); 
      Console.WriteLine("First Name: "); 
      string firstNameInput = Console.ReadLine(); 
      Console.WriteLine("Last Name: "); 
      string lastNameInput = Console.ReadLine(); 
      Console.WriteLine("Email: "); 
      string emailInput = Console.ReadLine(); 

      SqlCommand createLogin = new SqlCommand("INSERT INTO [dbo].[Users] VALUES ('@username', '@password', '@firstname', '@lastname', '@email')", myConnection.SqlConnection); 
      SqlParameter usernameParam = createLogin.Parameters.Add("@username", SqlDbType.VarChar, 40); 
      SqlParameter passwordParam = createLogin.Parameters.Add("@password", SqlDbType.VarChar, 50); 
      SqlParameter firstNameParam = createLogin.Parameters.Add("@firstname", SqlDbType.VarChar, 40); 
      SqlParameter lastNameParam = createLogin.Parameters.Add("@lastname", SqlDbType.VarChar, 40); 
      SqlParameter emailParam = createLogin.Parameters.Add("@email", SqlDbType.VarChar, 40); 

      usernameParam.Value = usernameInput; 
      passwordParam.Value = passwordInput; 
      firstNameParam.Value = firstNameInput; 
      lastNameParam.Value = lastNameInput; 
      emailParam.Value = emailParam; 


      createLogin.ExecuteNonQuery(); 
      Console.WriteLine("Username: {0} with Password: {1} created.", usernameInput, EncDec.Decrypt(passwordInput, "testEncryption")); 
     } 
     catch (Exception CreateLoginException) 
     { 
      Console.WriteLine(CreateLoginException); 
     } 

回答

7

你的參數和設置的聲明的價值是好的。你的代碼唯一的問題是,你已經把參數放在一個單引號中,這使得它成爲一個字符串,而不再是一個參數。刪除你的周圍參數中單引號中查詢,

SqlCommand createLogin = new SqlCommand(
       "INSERT INTO [dbo].[Users] 
        VALUES (@username, @password, @firstname, @lastname, @email", 
       myConnection.SqlConnection); 

Command對象自動處理它。

1

應該

createLogin.Parameters.AddwithValue("@parameter", parametervalue)

,並刪除參數代碼的其餘部分。

你並不需要獲得複雜的使用AddWithValue代替Add(

+2

還有就是使用'Add'並且還通過使用'AddWithValue'不會解決問題的沒有問題。 –

+0

另外它會導致帶有字符串長度的'nvarchar',並且OP使用具有預設長度的'varchar'。如果您的代碼需要使用nvarchar以外的內容,或者可能假設該變量有更多空間對字符串執行編輯,則這可能會導致問題。 –

+0

這解決了我收到的錯誤,謝謝。 –

相關問題