У меня проблема с базой данных SQL при попытке добавить к ней значения

0
 public partial class SignUp : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void btSignup_Click(object sender, EventArgs e)
    {
        if (tbUname.Text != "" & tbPass.Text != "" && tbName.Text != "" && tbEmail.Text != "" && tbCPass.Text != "")
        {
            if (tbPass.Text == tbCPass.Text)
            {
                String CS = ConfigurationManager.ConnectionStrings["Database_AvaliacaoConnectionString1"].ConnectionString;
                using (SqlConnection con = new SqlConnection(CS))
                {
                    SqlCommand cmd = new SqlCommand("insert into Users Values('" + tbUname.Text + "','" + tbPass.Text + "','" + tbEmail.Text + "','" + tbName.Text + "','')", con);
                    con.Open();

                    cmd.ExecuteNonQuery();
                    lblMsg.Text = "Registration Successfull";
                    lblMsg.ForeColor = Color.Green;
                   // Response.Redirect("~/Signin.aspx");
                }
            }
            else
            {
                lblMsg.ForeColor = Color.Red;
                lblMsg.Text = "Passwords do not match";
            }
        }
        else
        {
            lblMsg.ForeColor = Color.Red;
            lblMsg.Text = "All Fields Are Mandatory";

        }
    }
}

В таблице "Пользователи" я получил следующие значения:

 [Uid] int IDENTITY (1,1) PRIMARY KEY, 
[Username] NVARCHAR(MAX) NULL, 
[Password] NVARCHAR(MAX) NULL, 
[Email] NVARCHAR(MAX) NULL, 
[Name] NVARCHAR(MAX) NULL

Это приводит к ошибке при попытке зарегистрироваться:

System.Data.SqlClient.SqlException: "Явное значение столбца идентификации в таблице" Пользователи "может быть указано только при использовании списка столбцов, а IDENTITY_INSERT включен.

По какой-то причине он не позволяет мне добавлять значения.

  • 1
    uid получает значение от самой БД. Вы не предоставите это! insert into t (col2, col3) values ('v1', 'v2') столбцы, в которые вы вставляете, вот так (и оставьте столбец uid ): insert into t (col2, col3) values ('v1', 'v2')
  • 2
    И не храните пароли в виде простого текста. Сохраняйте только значение хеша !!
Показать ещё 4 комментария
Теги:

1 ответ

2
Лучший ответ

Вы вставляете в столбцы, чтобы они отображались в таблице:

"insert into Users Values('" + tbUname.Text + "','" + tbPass.Text + "','" + tbEmail.Text + "','" + tbName.Text + "','')"

Итак, вы говорите здесь, что первый UID поля должен быть установлен на все, что находится в tbUname.Text. Это вздор.

Вместо этого укажите, какие поля вы вставляете, а затем перечислите их в следующем порядке:

"insert into Users (Username, Password, Email, [Name]) Values('" + tbUname.Text + "','" + tbPass.Text + "','" + tbEmail.Text + "','" + tbName.Text + "')"

Несвязанные, но тревожные вещи в вашем коде:

  1. Не связывайте строку SQL вместе. Это дает вам широкое распространение для атаки SQL-инъекций. Вместо этого параметризуйте свой SQL

  2. Не храните пароли в текстовом виде в базе данных. Они должны быть хэшированы и соленые.

  • 0
    Но я сделал это, и это дает мне следующее -> В операторе INSERT меньше столбцов, чем значений, указанных в предложении VALUES. Количество значений в предложении VALUES должно соответствовать количеству столбцов, указанному в операторе INSERT.
  • 0
    Вы уверены , что вы удалили , что окончательная пустой '' строку , которую вы пытаетесь вставить в первоначальном заявлении. Конец твоего: + tbName.Text + "','')" Конец моего: + tbName.Text + "')"
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню