2013-03-11 45 views
1

我想在SQL數據庫類型中創建一個VarChar的zip代碼,並讓它在數據庫中用字母和數字提交。當郵政編碼具有int SQL數據庫類型時,表單將被提交到數據庫的zip列中,但是當郵政編碼的值爲VarChar 50時,該值不會被提交到名爲zipPostal的數據庫中的新列。在C#中的郵編和aspx爲VarChar而不是int

這裏是在ASPX代碼:

<asp:Label runat="server" ID="zipLabel" AssociatedControlID="zip">Zip/Postal 
    Code</asp:Label>  
    <asp:TextBox ID="zip" name="zip" runat="server"></asp:TextBox> 

下面是代碼的C#代碼片段:

/// Form post data from registration form 
    string username = Request.Form["UserName"]; 
    string first = Request.Form["first"]; 
    string last = Request.Form["last"]; 
    string zip = Request.Form["zip"]; 

    sqlCommand.Parameters.Add(new SqlParameter("@email", SqlDbType.VarChar, 50, 
    ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Proposed, emails)); 

    sqlCommand.Parameters.Add(new SqlParameter("@username", SqlDbType.VarChar, 15, 
    ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Proposed, username)); 

    sqlCommand.Parameters.Add(new SqlParameter("@firstName", SqlDbType.VarChar, 20,  
    ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Proposed, first)); 

    sqlCommand.Parameters.Add(new SqlParameter("@lastName", SqlDbType.VarChar, 20,  
    ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Proposed, last)); 


sqlCommand.Parameters.Add(new SqlParameter("@zip", SqlDbType.VarChar, 50, 
    ParameterDirection.Input, false, 0, 0, "", DataRowVersion.Proposed, zip)); 

SQL命令類型:

 int chk = sqlCommand.ExecuteNonQuery(); 

    public string CheckEmail(string Email) 
    { 

    string returnValue = string.Empty; 
    SqlConnection conn = new SqlConnection(strConnection); 
    SqlCommand sqlCommand = new SqlCommand 

    ("CheckEmailAvailability", conn); 
    try 
    { 
     sqlCommand.CommandType = 

    CommandType.StoredProcedure; 
    sqlCommand.Parameters.AddWithValue("@Email", 

    Email.Trim()); 
     conn.Open(); 
     returnValue = sqlCommand.ExecuteScalar().ToString(); 
     conn.Close(); 
    } 
    catch 
    { 

    } 

    finally 
    { 
     conn.Close(); 
     sqlCommand.Dispose(); 
    } 

    return returnValue; 
    } 

////

public string CheckUsername(string Username) 
    { 

    string returnValue = string.Empty; 
    SqlConnection conn = new SqlConnection(strConnection); 
    SqlCommand sqlCommand = new SqlCommand 

    ("CheckUsernameAvailability", conn); 
    try 
    { 
     sqlCommand.CommandType = 

    CommandType.StoredProcedure; 
     sqlCommand.Parameters.AddWithValue("@UserName", 

    Username.Trim()); 
     conn.Open(); 
     returnValue = sqlCommand.ExecuteScalar().ToString(); 
     conn.Close(); 
    } 
    catch 
    { 

    } 

    finally 
    { 
     conn.Close(); 
     sqlCommand.Dispose(); 
    } 

    return returnValue; 
    } 

    } 

//存儲過程

if (username != "") 
    { 
     string checkUN = CheckUsername(username); 

     if (checkUN == "true") 
     { 
      Label2.Text = "Username already exists."; 
      gotoauth = 0; 
      return; 

     } 
    } 
    //[ckc] end check username 

    if (password != confirmpwd) 
    { 
     Label2.Text = "The Password and Confirmation 

    Password must match."; 
     gotoauth = 0; 
     return; 
    } 



    //connection with db and call procedure. 
    SqlConnection conn = new SqlConnection(strConnection); 
    SqlCommand sqlCommand = new SqlCommand 

    ("customers_insert", conn); 
    sqlCommand.CommandType = CommandType.StoredProcedure; 
    conn.Open(); 


    try 
    { 


    if (gotoauth == 0) 
    {} 


    else 
     { 



var customerGateway = new 

    CustomerGateway(_loginApikey, _TransactionKey, 

    ServiceMode.Live); 
    var NewCustomer = customerGateway.CreateCustomer 

    (emails, "Live User Account"); 
    var datetime = DateTime.Now.ToString(); 

string proid = NewCustomer.ProfileID; 
    Session["Customerproid"] = proid; 

/// SQL過程

SET QUOTED_IDENTIFIER ON 
    GO 
    ALTER PROCEDURE [dbo].[customers_insert] 
    @email varchar(50) , 
    @username varchar(15) , 
    @firstName varchar(20) , 
    @lastName varchar(20) , 
    @country varchar(50) , 
    @address varchar(100) , 
    @city varchar(100) , 
    @state varchar(50) , 
    @account bigint = null , 
    @profileID bigint = null , 
    @password varchar(20) , 
    @customerNumber int = null , 
    @question varchar(50) , 
    @answer varchar(50) , 
    @dob varchar(50) , 
    @AccountNumber varchar(50) = null , 
    @PinNumber varchar(50) = null , 
    @PhoneNumber varchar(50) = null, 
    @ApprovalID int, 
    @DateTime varchar (50) = null, 
    @thoughts varchar (100) = null, 
    @zip varchar (50) = null 


    AS 

    INSERT [dbo].[customers] 
    (
    [email], 
    [username], 
    [firstName], 
    [lastName], 
    [country], 
    [address], 
    [city], 
    [state], 
    [account], 
    [profileID], 
    [password], 
    [customerNumber], 
    [question], 
    [answer], 
    [dob], 
    [AccountNumber], 
    [PinNumber], 
    [PhoneNumber], 
    [ApprovalID], 
    [DateTime], 
    [thoughts], 
    [zip] 


    ) 
    VALUES 
    (
    @email, 
    @username, 
    @firstName, 
    @lastName, 
    @country, 
    @address, 
    @city, 
    @state, 
    @account, 
    @profileID, 
    @password, 
    @customerNumber, 
    @question, 
    @answer, 
    @dob, 
    @AccountNumber, 
    @PinNumber, 
    @PhoneNumber, 
    @ApprovalID, 
    @DateTime, 
    @thoughts, 
    @zip 

    ) 

在SQL數據庫中,存在一種用於拉鍊的柱(INT非空)和zipPostal柱(VARCHAR (50),null)。我希望郵政編碼數據在郵政郵遞欄中顯示,以便接受字母和數字。

任何幫助將不勝感激。

+0

它是一個查詢或存儲過程?以及查詢或存儲過程是什麼樣子? – 2013-03-11 16:42:06

+3

你不能只希望SQL Server神奇地爲你做出決定。 – 2013-03-11 16:42:23

+1

請顯示更多你現有的代碼。上面顯示的「片段」實際上還不足以繼續。 – 2013-03-11 16:44:39

回答

1

很可能您有一個查詢 - 無論是在存儲過程形式的後端數據庫中,還是在SqlCommand形式的c#代碼中 - 即zip列。您需要更改該查詢/過程以引用適當的字段。如果您的代碼表示該值應插入到zip中,則永遠不會將其插入到zipPostal中。

編輯:現在我們可以看到您的存儲過程,它確認這是問題。以下是如何解決這個問題:

ALTER PROCEDURE [dbo].[customers_insert] 
@email varchar(50) , 
@username varchar(15) , 
@firstName varchar(20) , 
@lastName varchar(20) , 
@country varchar(50) , 
@address varchar(100) , 
@city varchar(100) , 
@state varchar(50) , 
@account bigint = null , 
@profileID bigint = null , 
@password varchar(20) , 
@customerNumber int = null , 
@question varchar(50) , 
@answer varchar(50) , 
@dob varchar(50) , 
@AccountNumber varchar(50) = null , 
@PinNumber varchar(50) = null , 
@PhoneNumber varchar(50) = null, 
@ApprovalID int, 
@DateTime varchar (50) = null, 
@thoughts varchar (100) = null, 
@zip varchar (50) = null 


AS 

INSERT [dbo].[customers] 
(
[email], 
[username], 
[firstName], 
[lastName], 
[country], 
[address], 
[city], 
[state], 
[account], 
[profileID], 
[password], 
[customerNumber], 
[question], 
[answer], 
[dob], 
[AccountNumber], 
[PinNumber], 
[PhoneNumber], 
[ApprovalID], 
[DateTime], 
[thoughts], 
[zipPostal] /*Here's what I changed*/ 


) 
VALUES 
(
@email, 
@username, 
@firstName, 
@lastName, 
@country, 
@address, 
@city, 
@state, 
@account, 
@profileID, 
@password, 
@customerNumber, 
@question, 
@answer, 
@dob, 
@AccountNumber, 
@PinNumber, 
@PhoneNumber, 
@ApprovalID, 
@DateTime, 
@thoughts, 
@zip 

) 

你也可能在把郵政編碼爲根據其價值ZipzipPostal更復雜的方式編輯這一點,但我認爲,你應該把一切都變成zipPostal 。你應該把所有的數據放在一個地方,郵政編碼數據應該總是作爲一個字符串存儲,而不是一個數字,就像下面的銀河牛仔在評論中寫的那樣。

+0

我嘗試重新路由zip以輸入zipPostal作爲VarChar。這是通過改變你從zip壓縮郵件到zipPostal的頂部。問題是現場郵編不允許提交信件。 – 2013-03-11 17:03:51

+0

這是因爲更改參數的名稱不是重要的部分。您需要更改命令文本本身。我幾乎肯定問題出在'sqlCommand.CommandText';請張貼您的C#代碼的那一部分。 – 2013-03-11 17:05:14

+0

我沒有commandText,但commandType在我的代碼中,用於查看電子郵件是否已被使用。我會把它放在最上面。 – 2013-03-11 17:12:48

0

您還沒有發佈相關的SQL代碼。

您已發佈調用「CheckUserNameAvailability」存儲過程的代碼,以及調用名爲「CheckEmailAvailability」的存儲過程的另一個代碼。這些存儲過程都不與試圖設置郵政編碼的代碼相關。

我懷疑你正在調用另一個採用@Zip作爲參數的存儲過程。該存儲過程必須進行編輯才能更新正確的列。

UPDATE:

變化

INSERT [dbo].[customers] 
(
[email], 
[username], 
[firstName], 
[lastName], 
[country], 
[address], 
[city], 
[state], 
[account], 
[profileID], 
[password], 
[customerNumber], 
[question], 
[answer], 
[dob], 
[AccountNumber], 
[PinNumber], 
[PhoneNumber], 
[ApprovalID], 
[DateTime], 
[thoughts], 
[zip] 


) 
VALUES 
(
@email, 
@username, 
@firstName, 
@lastName, 
@country, 
@address, 
@city, 
@state, 
@account, 
@profileID, 
@password, 
@customerNumber, 
@question, 
@answer, 
@dob, 
@AccountNumber, 
@PinNumber, 
@PhoneNumber, 
@ApprovalID, 
@DateTime, 
@thoughts, 
@zip 

) 

INSERT [dbo].[customers] 
(
[email], 
[username], 
[firstName], 
[lastName], 
[country], 
[address], 
[city], 
[state], 
[account], 
[profileID], 
[password], 
[customerNumber], 
[question], 
[answer], 
[dob], 
[AccountNumber], 
[PinNumber], 
[PhoneNumber], 
[ApprovalID], 
[DateTime], 
[thoughts], 
[zipPostal] 


) 
VALUES 
(
@email, 
@username, 
@firstName, 
@lastName, 
@country, 
@address, 
@city, 
@state, 
@account, 
@profileID, 
@password, 
@customerNumber, 
@question, 
@answer, 
@dob, 
@AccountNumber, 
@PinNumber, 
@PhoneNumber, 
@ApprovalID, 
@DateTime, 
@thoughts, 
@zip 

) 
+0

根據存儲過程發佈 – 2013-03-11 17:41:25

相關問題