ошибки при попытке вставить в базу данных MySQL? - PullRequest
0 голосов
/ 15 марта 2011

Необработанная ошибка при попытке добавить в базу данных?OdbcParameterCollection принимает только ненулевые объекты типа OdbcParameter, а не объекты String.

    protected void Button1_Click(object sender, EventArgs e)
    {

    string email = TextBox1.Text; //added variable name
    string firstname = TextBox2.Text;
    string secondname = TextBox3.Text;
    string dob = TextBox4.Text;
    string location = TextBox5.Text;
    string aboutme = TextBox6.Text;

    OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite; User=root; Password=;");
    cn.Open();
    OdbcCommand cmd = new OdbcCommand("INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme) VALUES (email, firstname, secondname, dob, location, aboutme)"); // fixed incomplete insert statement.

        cmd.Parameters.Add(email);
        cmd.Parameters.Add(firstname);
        cmd.Parameters.Add(secondname);
        cmd.Parameters.Add(dob);
        cmd.Parameters.Add(location);
        cmd.Parameters.Add(aboutme);//add the parameter to the command
        cmd.ExecuteNonQuery(); //actually run the sql


    }

}

Я пробовал это, но получаю ошибку System.InvalidOperationException: ExecuteNonQuery: свойство подключения не было инициализировано.

Я также изменил базу данных, чтобы она не была NN (ненулевой), чтобы посмотреть, поможет ли это, но не радует

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlClient;
using System.Data.Odbc;

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

    }
    protected void Button1_Click(object sender, EventArgs e)
    {

    string email = TextBox1.Text; //added variable name
    string firstname = TextBox2.Text;
    string secondname = TextBox3.Text;
    string dob = TextBox4.Text;
    string location = TextBox5.Text;
    string aboutme = TextBox6.Text;

    OdbcConnection cn = new OdbcConnection("Driver={MySQL ODBC 3.51 Driver}; Server=localhost; Database=gymwebsite; User=root; Password=;");
    cn.Open();
    OdbcCommand cmd = new OdbcCommand("INSERT INTO User(Email) VALUES('?Email')");



    cmd.Parameters.Add(new OdbcParameter("?email", email));
    cmd.ExecuteNonQuery();


    }

}

Данные в базе данных состоят из заглавных букв, таких как 'L'ocation и мои строки установлены в нижнем регистре.Не уверен, что в моем коде это задом наперед?

-- -----------------------------------------------------

-- Table `gymwebsite`.`User`

-- -----------------------------------------------------

CREATE  TABLE IF NOT EXISTS `gymwebsite`.`User` (

  `UserID` INT NOT NULL AUTO_INCREMENT ,

  `Email` VARCHAR(245) NULL ,

  `FirstName` VARCHAR(45) NULL ,

  `SecondName` VARCHAR(45) NULL ,

  `DOB` VARCHAR(15) NULL ,

  `Location` VARCHAR(45) NULL ,

  `Aboutme` VARCHAR(245) NULL ,

  PRIMARY KEY (`UserID`) )

ENGINE = InnoDB;

INSERT INTO `gymwebsite`.`user`
(`UserID`,
`Email`,
`FirstName`,
`SecondName`,
`DOB`,
`Location`,
`Aboutme`)
VALUES
(
{UserID: INT},
{Email: VARCHAR},
{FirstName: VARCHAR},
{SecondName: VARCHAR},
{DOB: VARCHAR},
{Location: VARCHAR},
{Aboutme: VARCHAR}
);
EDIT `gymwebsite`.`user`;

Ответы [ 6 ]

1 голос
/ 15 марта 2011

Используйте это

OdbcCommand cmd = new OdbcCommand("INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme) VALUES ("+ email +","+ firstname+","+SecondName+","+DOB+","+Location+","+Aboutme+")",cn); 

Попробуйте сыграть, используя параметры ... которые я выложил ранее, и они работают.

С уважением

0 голосов
/ 15 марта 2011

Использование Parameters.AddWithValue () метод,

OdbcCommand cmd = new OdbcCommand("INSERT INTO `User` 
  (Email, FirstName, SecondName, DOB, Location, Aboutme) 
    VALUES 
     ('?Email', '?FirstName', '?SecondName', '?DOB', '?Location','?Aboutme')",cn); 

cmd.Parameters.AddWithValue("?Email", textBox1.Text);
...
0 голосов
/ 15 марта 2011

Вы пробовали это?

cmd.Parameters.Add(new OdbcParameter(email));

Также есть несколько перегрузок.

0 голосов
/ 15 марта 2011

Вам также может понадобиться использовать команду SQL для использования вопросительных знаков, таких как:

OdbcCommand cmd = new OdbcCommand("INSERT INTO User (Email, FirstName, SecondName, DOB, Location, Aboutme) VALUES (?, ?, ?, ?, ?, ?)");
0 голосов
/ 15 марта 2011

Вам необходимо добавить OdbcParameter экземпляров в коллекцию параметров:

cmd.Parameters.Add(new OdbcParameter("email", email)); 
...

Первый параметр - это имя параметра в операторе вставки, а второй - объект, используемый для определения DbType и содержимого.

0 голосов
/ 15 марта 2011

Укажите все параметры в этой строке -

var v1 = cmd.Parameters.Add("email",OdbcType.VarChar, , 30); v1.Value = email;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...