insertar cuadro de texto los valores en la base de datos

soy un novato y quisiera algunos consejos sobre la programación de C#

me gustaría almacenar los valores de un cuadro de texto en una base de datos.
hasta ahora, tengo lo siguiente:

string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Customers.mdf;Integrated Security=True;User Instance=True";
SqlConnection connection = new SqlConnection(connectionString);
connection.Open();

string query = "INSERT INTO ProjectList (ProjectName, BiddingDueDate, Status, ProjectStartDate, ProjectEndDate, AssignedTo, PointsWorth, StaffCredits) VALUES ('"+projName+"', '"+bidDueDate+"', '"+status+"', '"+projectStartDate+"', '"+projectEndDate+"', '"+assignedTo+"', '"+pointsWorth+"', '"+aStaffCredits+"')";
SqlCommand command = new SqlCommand(query, connection);

command.ExecuteNonQuery();
connection.Close();

Que no hay errores en el código, pero no me parece para averiguar por qué nada se almacenan en la base de datos.

  • Las variables que se están utilizando, son los cuadro de Texto nombre o cadena de valor?
InformationsquelleAutor jill | 2010-11-05

6 Kommentare

  1. 11

    Primero, su código es el momento propicio para Los ataques de Inyección SQL – realmente debería ser el uso de consultas parametrizadas.

    También, si el uso de los parámetros, puede tener algún tipo de seguridad y de los valores será traducido correctamente a SQL Server.

    Es difícil decir lo que está mal aquí, ya que los valores se concatenan nos son desconocidos (por ejemplo, ¿qué bidDueDate parece?, ¿Qué thisQuery aspecto antes de ejecutarlo?).

    Yo normalmente escribo esto como un procedimiento almacenado de tomar los parámetros que necesita para insertar un registro, en mi C# me gustaría crear el objeto de comando agregar los parámetros correctos (y tipos) a ella.

    Ver el ejemplo en este página de MSDN (SqlCommand.Los parámetros).

    • +1 para sql inyección de mí así. Desde jill dice ser un novato, creo que es mejor que los nuevos desarrolladores deben aprender acerca de la seguridad de la que realmente primeras etapas.
    • Compilador – si usted menciona a Bobby, al menos, un enlace
  2. 7

    Al menos, el código debe tener este aspecto:

    void SaveData(string projectName, DateTime biddingDueDate, string status, DateTime projectStartDate, string assignedTo, int pointsWorth, string staffCredits)
    {
        try
        {
            string connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Customers.mdf;Integrated Security=True;User Instance=True";
            using (SqlConnection connection = new SqlConnection(connectionString))
            using (SqlCommand command = connection.CreateCommand())
            {
                command.CommandText = "INSERT INTO ProjectList (ProjectName, BiddingDueDate, Status, ProjectStartDate, ProjectEndDate, AssignedTo, PointsWorth, StaffCredits) VALUES (@projectName, @biddingDueDate, @status, @projectStartDate, @projectStartDate, @assignedTo, @pointsWorth, @staffCredits)";
    
                command.Parameters.AddWithValue("@projectName", projectName);
                command.Parameters.AddWithValue("@biddingDueDate", biddingDueDate);
                command.Parameters.AddWithValue("@status", status);
                command.Parameters.AddWithValue("@projectStartDate", projectStartDate);
                command.Parameters.AddWithValue("@assignedTo", assignedTo);
                command.Parameters.AddWithValue("@pointsWorth", pointsWorth);
                command.Parameters.AddWithValue("@staffCredits", staffCredits);
    
                connection.Open();
                command.ExecuteNonQuery();
            }
        }
        catch (SqlException ex)
        {
            Console.WriteLine(ex.Message);
        }
    
    }

    Tipo del parámetro se puede determinar (tratado de ser) de forma automática:

    command.Parameters.AddWithValue("@biddingDueDate", biddingDueDate);

    o especificado manualmente:

    command.Parameters.Add("@biddingDueDate", System.Data.SqlDbType.DateTime).Value = biddingDueDate;

    también puede convertir fecha a cadena con el formato especificado para minimizar el riesgo de confundirse con el análisis de (a causa de la cultura dependiente de la especificidad, etc) en la base de datos secundarios:

    command.Parameters.Add("@biddingDueDate", System.Data.SqlDbType.DateTime).Value = biddingDueDate.ToString("yyyy-MM-dd"); //also you can use just yyyyMMdd
    • gracias por mostrarme cómo el código debe ser similar! otra pregunta, es la siguiente línea de comando.Los parámetros.AddWithValue(«@biddingDueDate», biddingDueDate); sólo si la biddingDueDate es una cadena?
    • por cierto, puede utilizar tildes para resaltar la sintaxis en los comentarios: var hello = "world!";
  3. 0

    Si la variable en el ejemplo es el cuadro de texto que debe escribir como projName.Texto, el estado.Texto.

  4. 0

    ¿Tienes la Copia en el Directorio de Salida’ de la propiedad se establece a ‘Copiar Siempre’ para el archivo de base de datos?

    Ya que podría sobrescribir el archivo de base de datos cada vez que construir.

  5. 0

    la primera cosa que usted quiere hacer para averiguar lo que está mal es poner

    Console.WriteLine(thisQuery);

    después de la línea StringthisQuery=

    Esto le mostrará exactamente lo que la declaración de que usted está llamando a la Db, y puede ser claro con solo ver el resultado de lo que está mal con la declaración.

  6. -1

    si su ProjectStartDate y las fechas en general son valores datetime en la base de datos, a continuación, aparecerá un mensaje de error al insertar datos con el ‘.
    Debe ser como:

    String thisQuery = "INSERT INTO ProjectList (ProjectName, BiddingDueDate, Status, ProjectStartDate, ProjectEndDate, AssignedTo, PointsWorth, StaffCredits) VALUES ('"+projName+"', "+bidDueDate+", '"+status+"', "+projectStartDate+", "+projectEndDate+", '"+assignedTo+"', '"+pointsWorth+"', '"+aStaffCredits+"')"; 
    • Utilice siempre los parámetros sql aka consultas parametrizadas
    • Lo sé… pero esto fue sólo para que lo ayudara a salir y seguir adelante con su problema 🙂

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea