Данные не вставлены в мою таблицу - PullRequest
0 голосов
/ 29 мая 2011

У меня есть таблица simpe:

Users
UserID     Guid   doesnt allow null
Avatar     image  allows null
Reputation int    allows null

Я использовал следующее утверждение:

string insertCommand = "INSERT INTO Users (UserID) VALUES" +""+ "('"+UsersIdentityToinsert+"')";

UsersIdentityToinsert (это значение является Guid, я проверил его значение, оно не равно нулю).

Не было никаких исключений. Как только пользователь нажимает кнопку входа, он переносится на другую страницу и его запись вставляется. Я продолжил с отладкой, что этот оператор выполняется.

Когда я возвращаюсь к своему обозревателю серверов в Visual Studio 2010 и нажимаю обновить, таблица «Пользователи» пуста. Почему это?

Строка подключения

<add name="YourGuruDB" connectionString="Data Source=DIMA-00AA1DA557;Initial Catalog=model;Integrated Security=True"/>

Я извлекаю его из конфигурации в код:

WebConfigurationManager.ConnectionStrings["YourGuruDB"].ConnectionString;

Добавлено:

    public static void InsertUsers(Guid UsersIDentity)
{
    SqlConnection sqlConnect = getSqlConnection();
    SqlCommand sqlCommand = new SqlCommand(RegisterAdo.insertCommand(UsersIDentity), sqlConnect);//insert command method returns the insert statement described above
    try
    {
        sqlConnect.Open();
        sqlCommand.ExecuteNonQuery();

    }
    catch (Exception x)
    {
        HttpContext.Current.Response.Redirect("~/ErrorPage.aspx?Error=" + WRITE_ERROR);

    }
    finally
    {
        sqlConnect.Close();
    }
}

Ответы [ 3 ]

1 голос
/ 29 мая 2011

Вместо использования

"INSERT INTO Users (UserID) VALUES" +""+ "('"+UsersIdentityToinsert+"')";

используйте это:

"INSERT INTO Users (UserID) VALUES" +""+ "(CONVERT(uniqueidentifier, '"+UsersIdentityToinsert+"'))";

И вам действительно следует использовать подготовленный оператор вместо конкатенации SQL.

А как насчет DB-соединения? Вы выполнили какие-либо успешные заявления до сих пор? Попробуйте просто выбрать.

0 голосов
/ 29 мая 2011

Есть несколько вещей, которые нужно проверить

  • Вы подключены к нужной базе данных?
  • Действительно ли работает код, который выполняет этот оператор SQL. Вы не показываете этот код. Я бы ожидал ExecuteNonQuery() на SqlCommand объекте где-то.
  • Вы действительно открываете соединение с базой данных? Или строка подключения находится только в конфигурации, и нигде не используется в вашем коде?

Кроме того, ваш код подвержен атаке SQL-инъекций. Вы должны использовать параметризованный запрос, чтобы предотвратить это. Эта статья о атаках с использованием SQL-инъекций поможет вам с ее написанием.

У вас также отсутствует код, который я ожидаю увидеть. Что-то вроде этого:

string insertCommand = "INSERT INTO Users (UserID) VALUES" 
    +""+ "('"+UsersIdentityToinsert+"')";
string cs = WebConfigurationManager.ConnectionStrings["YourGuruDB"].ConnectionString;
SqlConnection conn = new SqlConnection(cs);
SqlCommand cmd = new SqlCommand(insertCommand, conn);
conn.Open();
cmd.ExexuteNonQuery();
conn.Close();
0 голосов
/ 29 мая 2011

попробуйте это:

"INSERT INTO Users (UserID) VALUES ('"+UsersIdentityToinsert+"')";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...