2012-06-22 5 views
7

Я собираюсь изменить значение текстового поля .. но я видел, что есть проблемаНазвание «SqlDbType» не существует в текущем контексте

protected void btn_edit_Click(object sender, EventArgs e) 
    { 
     DatabaseConnector con = new DatabaseConnector().CreateInstance(); 
     SqlCommand com = new SqlCommand("UPDATE tbl_BinCardManager SET ItemName = @ItemName WHERE ItemNo = @ItemNo"); 
     com.Parameters.Add("@ItemName",sqlDbType.VarChar); 
     con.Open(); 
     cmd.ExecuteNonQuery(); 
     con.Close(); 

    } 

ОШИБКА 1:

Название ' SqlDbType»не существует в текущем контексте

ERROR 2:

«ERPSystem.DatabaseConnector» не содержит определения для «Open» и не используется метод расширения «Открыть», принимающий первый аргумент типа «ERPSystem.DatabaseConnector» (вам не хватает указателя или ссылки на сборку ?)

Мой DBConnector Класс:

class DatabaseConnector 
{ 
    private DatabaseConnector databaseConnector; 
    private string connectionString = "Data Source=lernlap;Initial Catalog=ERPSystemDB;User ID=sa;Password=sa123"; 

    public DatabaseConnector() 
    { 

    } 

    private SqlConnection connection; 

    private bool Connect() 
    { 
     try 
     { 
      connection = new SqlConnection(connectionString); 
      connection.Open(); 
      return true; 
     } 
     catch(Exception) { 

      return false; 

     } 
    } 

    internal DatabaseConnector CreateInstance() 
    { 
     if (databaseConnector == null) 
     { 
      databaseConnector = new DatabaseConnector(); 
      databaseConnector.Connect(); 
     } 
     return databaseConnector; 
    } 
+2

C# чувствителен к регистру. –

+0

да, но theres no any case проблема с чувствительностью знаю – Learner

+3

SqlDbType - у вас был нижний регистр s – javajavajava

ответ

12

C# - случай чувствительный ... Попробуйте использовать intellisense.

SqlDbType 

Другие ошибки могут исчезнуть, если вы исправите первый.


На боковой ноте вы столкнетесь с утечками соединения/памяти без надлежащей обработки ресурсов. Лично я использую заявление using, чтобы избежать подводных камней.

Я не совсем уверен, что такое «DatabaseConnector», возможно ваш собственный класс, но вы, вероятно, должны использовать SqlConnection или, возможно, SqlDatabase.

Обновление: Я не уверен, что класс DBConnector должен быть одноэлементным или фабричным или обоими, поэтому я просто упростил свой ответ, чтобы избежать его использования. Задайте еще один вопрос с подробностями о том, как создать шаблон, который вы ищете, и предоставить класс DBConnector. Я думаю, что это умело, но у меня просто недостаточно информации, чтобы исправить то, что у вас есть.

public static CONN_STR = "Data Source=lernlap;Initial Catalog=ERPSystemDB;User ID=sa;Password=sa123"; 

    protected void btn_edit_Click(object sender, EventArgs e) 
    { 
     using(SqlConnection con = new SqlConnection(CONN_STR)) 
     { 
      con.Open(); 

      using(SqlCommand cmd = new SqlCommand("UPDATE tbl_BinCardManager SET ItemName = @ItemName WHERE ItemNo = @ItemNo"), con) 
      { 

      // TODO: fill in param values with real values 
      cmd.Parameters.AddWithValue("@ItemName", "my item name"); 
      cmd.Parameters.AddWithValue("@ItemNo", 1); 

      cmd.ExecuteNonQuery(); 
      } 
     } 
    } 
+0

еще одна вещь в этом коде около con.Open() & con.close() красная подчеркнутая.Когда я накладываю курсор на что тогда я увидел Metos Stub Create. (тогда я увидел то, что было создано в классе соединителей db). Почему? – Learner

+1

Что конкретно представляет собой DatabaseConnector? Ваш собственный класс? –

+1

@ChrisGessler - Если бы я был опасен догадки, это было основано на этом коде: http://www.codeproject.com/Articles/32909/Database-Connector –

2

У вас больше ошибок.

  • Основываясь на том, как вы используете его, я думаю, что вы имеете в виду SqlConnection вместо DatabaseConnector
  • Вы создаете SqlCommand с именем com, но относятся к нему как cmd
  • Вам нужно будет назначить SqlConnection к SqlCommand, или он не будет знать, какое соединение открыть.
  • Вы предоставляете только один параметр SqlCommand, а для запроса нужны два (ItemNo, а также ItemName).

Edit, на основе нового источника:

  • Ошибка «DatabaseConnector» не содержит определения для "Open» можно исправить, написав con.Connect() вместо con.Open().
  • Однако, другая ошибка, что она не имеет функции «Закрыть()», не может быть исправлена ​​- нет способа сказать ей закрыть соединение.

Это ваш собственный код?

+0

Да, это мой собственный код – Learner

+0

Затем добавьте к нему функцию который может закрыть соединение. Или просто выбросьте весь DatabaseConnector и напрямую используйте SqlConnection. –

+0

, когда я всюду по базе данныхConnector моя connectionstring также потеря знает? – Learner

1

Вы используете класс, сделанный The Code Project?

Ну, я думаю, ошибка связана с тем, что строка подключения. Строка подключения должна быть в классе OdbcDatabaseConnector. Ну, я никогда не использовал этот класс Code Project, но может быть и так.

+0

Я использую соединитель базы данных SQL – Learner

3
yes but theres no any case sensitivity problem know 

Вы на самом деле есть синтаксические ошибки, потому что вы использовали s вместо S. Кроме того SqlCommand не имеет метод, называемый Open() и не имеет один для Close()

Вы должны использовать SqlConnection, поскольку она содержит методы Open() и Close() и установить Connection свойство SQLCommand к экземпляру SqlConnection для того, чтобы открыть и закройте соединение с вашей базой данных.

0

Его капитал «S» в SqlDbType, после внесения коррекции, щелкните правой кнопкой мыши по слову, наведите курсор мыши на параметр «Разрешить» и добавьте пространство имен System.Data. работал на меня!

1

Если вы пишете с капиталом «S», но все еще получаете ту же ошибку, особенно в визуальной студии 2015, то вместо написания «SqlDbType», пишет: System.Data.SqlDbType

, например:

param[0] = new SqlParameter("@Name", System.Data.SqlDbType.VarChar,50); 
Смежные вопросы