当前上下文中不存在名称“sqlDbType”

时间:2012-06-22 16:25:17

标签: c# c#-4.0

我要编辑文本框值..但我看到有问题

  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”

错误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;
    }

7 个答案:

答案 0 :(得分: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(); 
          }
        }
     }

答案 1 :(得分:7)

SqlDbType s需要大写!

答案 2 :(得分:3)

yes but theres no any case sensitivity problem know 

您实际上有语法错误,因为您使用了s而不是S。此外 SqlCommand没有名为Open()的方法,也没有Close()

的方法

您应该使用SqlConnection,因为它包含方法Open()Close()并将SqlCommand的Connection属性设置为您的SqlConnection实例,以便打开和关闭连接到您的数据库。

答案 3 :(得分:2)

您有更多错误。

  • 根据您使用它的方式,我认为您的意思是SqlConnection而不是DatabaseConnector
  • 您创建名为com的SqlCommand,但将其称为cmd
  • 您需要将SqlConnection分配给SqlCommand,否则它将不知道要打开哪个连接。
  • 您只向SqlCommand提供1个参数,而查询需要两个(ItemNo以及ItemName)。

根据您的新来源进行修改:

  • 错误" DatabaseConnector'不包含' Open'"的定义可以通过撰写con.Connect()代替con.Open()来纠正。
  • 然而,另一个错误,它没有"关闭()"功能,无法纠正 - 无法告诉它关闭连接。

这是你自己的代码吗?

答案 4 :(得分:1)

您使用的是The Code Project制作的课程吗?

好吧,我认为错误是因为连接字符串。连接字符串必须位于类OdbcDatabaseConnector中。好吧,我从来没有使用过这类代码项目,但可以是它。

答案 5 :(得分:1)

如果你用资本写作' S'但仍然得到相同的错误,特别是在visual studio 2015中,而不是写'SqlDbType' ,写道: System.Data.SqlDbType

例如:

  param[0] = new SqlParameter("@Name", System.Data.SqlDbType.VarChar,50);

答案 6 :(得分:0)

SqlDbType中的首字母'S',在进行更正后,右键单击该单词,鼠标悬停以解析选项并添加System.Data名称空间。为我工作!