2014-01-12 38 views
2

我必須將用戶數據添加到名爲「employees」的數據庫表中。它有ID,姓名,姓氏,用戶名,密碼,電子郵件,地址,administrator_rights選項。如何將bool插入到數據庫中

Administator_rigts是bool選項(是或否)。

我怎麼做,當我做一個窗體,所有的數據,我想檢查用戶是否有複選框的管理員權限(選中 - 真,未選中 - 錯誤)。

這是我的聲明,不包括admin_rights,因爲我不知道該怎麼做。

請幫我

string write = "Insert into Employees (ID, Name, Last_name, Username, Password, E_mail, Address) values('" + this.ID.Text + "','" + this.name.Text + "','" + this.lastName.Text + "','" + this.userName.Text + "','" + this.password.Text + "','" + this.eMail.Text + "','" + this.address.Text + "');"; 

謝謝大家對你的反應

+12

您的代碼極易遭受[SQL注入](http://en.wikipedia.org/wiki/SQL_injection)攻擊。請自己(和您的用戶)幫忙,並使用準備好的語句。 –

+3

什麼數據庫? SQL Server沒有'bool'類型。它確實有點類型,但值可以是0或1. –

+4

除了@ p.s.w.g所說的以外,在數據庫中存儲'this.password.Text'可能不是一個好主意。看到[這個問題](http://stackoverflow.com/questions/1054022/best-way-to-store-password-in-database),[那個問題](http://stackoverflow.com/questions/15742123/ how-to-store-passwords-in-database-secure)以及[本文](http://www.codinghorror.com/blog/2007/09/youre-probably-storing-passwords-incorrectly.html)。 –

回答

0

我幾年前使用的訪問,但是我可以在訪問記得布爾值如下:

0 = false 
-1 = true 

因此,對於插入到您的複選框,您可以使用像這樣:

int val; 
    if(CheckBox.Checked == true) 
{ 
val = -1; 
} 
else 
{ 
val =0 
} 

,那麼你應該將它添加到您的查詢:

string write = "Insert into Employees (ID, Name, Last_name, Username, Password, E_mail, Address) values('" + this.ID.Text + "','" + this.name.Text + "','" + this.lastName.Text + "','" + this.userName.Text + "','" + this.password.Text + "','" + this.eMail.Text + "','" + this.address.Text + "'"+val");"; 
1

SQL Server 2008 R2中具有能在布爾的情況B使用的鑽頭類型。 示例表創建腳本

/****** Object: Table [dbo].[testTable] Script Date: 01/12/2014 16:16:18 ******/ 
SET ANSI_NULLS ON 
GO 

SET QUOTED_IDENTIFIER ON 
GO 

CREATE TABLE [dbo].[testTable](
    [test] [bit] NOT NULL, 
    [testr] [int] NOT NULL 
) ON [PRIMARY] 

GO 

查詢插入C#查詢樣品中

INSERT INTO [dbo].[testTable] 
      ([test] 
      ,[testr]) 
    VALUES 
      ('false','32') 
GO 

同時:

string [email protected]"Insert Into testTable(test,testr) VALUES("'+checkbox.checked+'","'+empId+'")"; 
+0

SQL Server中的位字段不能使用字符串'false'。你必須使用1或0。 – Orion

2

使用的參數是對我好,雖然我不喜歡ADO。 NET:

SqlCommand Command = new SqlCommand(); 
      Command.Connection = MyConnection; 
      Command.CommandText = "Insert into Employees (ID, Name, Last_name, Username, Password, E_mail, Address, administrator_rights)" 
           + "values(@ID, @Name, @Last_name, @Username, @Password, @E_mail,Address, @admin_rights)"; 

      Command.Parameters.Add("@ID", 1); // some generated number 
      Command.Parameters.Add("@Name", TextBoxName.Text); 
      Command.Parameters.Add("@Last_name", TextBoxLastName.Text); 
      Command.Parameters.Add("@Username", TextBoxUserName.Text); 
      Command.Parameters.Add("@Password", TextBoxPassword.Text); 
      Command.Parameters.Add("@E_mail", TextBoxEmail.Text); 
      Command.Parameters.Add("@Address", TextBoxAddress.Text); 
      Command.Parameters.Add("@admin_rights", CheckBoxAdminRights.Checked); 

      using (MyConnection) 
      { 
       Command.ExecuteNonQuery(); 
      } 
1

使用參數:

OleDbCommand command = new OleDbCommand("Insert into Employees (ID, Name, Last_name, Username, Password, E_mail, Address, administrator_rights) values(?, ?, ?, ?, ?, ?, ?, ?)", 
             new OleDbConnection ("YourConnection")) 
{ 
    Parameters = { new OleDbParameter("ID", OleDbType.Integer), 
        new OleDbParameter("Name", OleDbType.VarWChar), 
        new OleDbParameter("Last_name", OleDbType.VarWChar), 
        new OleDbParameter("Username", OleDbType.VarWChar), 
        new OleDbParameter("Password", OleDbType.VarWChar), 
        new OleDbParameter("E_mail", OleDbType.VarWChar), 
        new OleDbParameter("Address", OleDbType.VarWChar), 
        new OleDbParameter("administrator_rights", OleDbType.Boolean)} 
}; 

private bool Update() 
{ 

    command.Parameters["ID"].Value = this.ID.Text; 
    command.Parameters["Name"].Value = this.name.Text; 
    command.Parameters["Last_name"].Value = this.lastName.Text; 
    command.Parameters["Username"].Value = this.userName.Text; 
    command.Parameters["Password"].Value = this.password.Text; 
    command.Parameters["E_mail"].Value = this.eMail.Text; 
    command.Parameters["Address"].Value = this.address.Text; 
    command.Parameters["administrator_rights"].Value = checkBox1.Checked; 

    if (command.Connection.State != ConnectionState.Open) command.Connection.Close(); 
    var result = command.ExecuteNonQuery(); 
    command.Connection.Close(); 

    return result == 0 ? false : true; 
}