当前上下文中不存在名为'sqlDbType'的名称。

7
我将编辑文本框的值,但我发现有一个问题。
  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'的第一个参数的扩展方法'Open'(是否缺少using指令或程序集引用?)

我的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;
    }

3
SqlDbType - 您将小写的s拼写错误了。 (SqlDbType - You spelled the lowercase "s" incorrectly.) - barbiepylon
1
回复:DatabaseConnector -- 你可能想读一下这个:https://dev59.com/a2kw5IYBdhLWcg3ws8xj#9707060 - Austin Salonen
1
@AustinSalonen - 我完全同意这些说法。请你自己一个忙,Learner,不要使用DatabaseConnector连接数据库,因为显然它是一个有缺陷的类。 - Security Hound
1
哦,而整个 new DatabaseConnector().CreateInstance() 结构让我感到不舒服。 - Mr Lister
1
@学习者 - 你不需要使用这个类。你的类所做的一切都已经被默认的ADO.NET类支持,并且以“正确的方式”完成。你只是无缘无故地制造问题、错误和使用可怕的代码。 - Security Hound
显示剩余4条评论
7个回答

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
DatabaseConnector 到底是什么?是你自己的类吗? - Chris Gessler
1
@ChrisGessler - 如果我要猜的话,它可能是基于这个代码:http://www.codeproject.com/Articles/32909/Database-Connector。 - Security Hound
2
@Learner - 红色下划线表示该方法不存在。当您单击“实现”时,它会为您在类中放置一个方法存根。我猜您没有正确使用DatabaseConnector类,但我没有源代码来指导您。 - Chris Gessler
1
@ChrisGessler - 你的代码出现了错误。变量 cmd 不存在,但你却试图调用 ExecuteNonQuery 方法。这就是为什么你应该建议更好的变量名的原因。 - Security Hound
1
@Ramhound - 抱歉...不是我的代码,但我会修复它。感谢您指出这一点。 - Chris Gessler
显示剩余9条评论

7

SqlDbType中的s需要大写!


3
yes but theres no any case sensitivity problem know 

你实际上存在语法错误,因为你使用了 s 而不是 S。此外,SqlCommand 没有名为 Open()Close() 的方法。
你应该使用 SqlConnection,因为它包含 Open()Close() 方法,并将 SqlCommand 的 Connection 属性设置为 SqlConnection 的实例,以便打开和关闭与数据库的连接。

2
您有更多的错误。
  • 根据您使用的方式,我认为您的意思是 SqlConnection 而不是 DatabaseConnector
  • 您创建了一个名为 com 的 SqlCommand,但是却用 cmd 进行引用。
  • 您需要将 SqlConnection 分配给 SqlCommand,否则它将不知道要打开哪个连接。
  • 您只为 SqlCommand 提供了 1 个参数,而查询需要两个(ItemNoItemName)。

根据您新的源代码进行编辑:

  • 错误“DatabaseConnector' does not contain a definition for 'Open'”可以通过编写 con.Connect() 而不是 con.Open() 来纠正。
  • 然而,另一个错误,即它没有“Close()”函数,无法纠正 - 没有办法告诉它关闭连接。

这是您自己的代码吗?


然后添加一个函数来关闭连接。或者直接放弃整个DatabaseConnector,使用SqlConnection。 - Mr Lister
当我遍历DatabaseConnector时,我的连接字符串也丢失了吗? - Learner

1
如果您在使用大写字母'S'的情况下仍然遇到相同的错误,尤其是在Visual Studio 2015中,那么请改为写成:System.Data.SqlDbType而不是'SqlDbType'。
例如:
  param[0] = new SqlParameter("@Name", System.Data.SqlDbType.VarChar,50);

1
你正在使用The Code Project制作的类吗?
嗯,我认为错误是由于连接字符串。连接字符串必须在OdbcDatabaseConnector类中。好吧,我从未使用过Code Project的这个类,但可能是它。

我正在使用SQL数据库连接器。 - Learner

0

在 SqlDbType 中,注意大写的 'S'。纠正后,右键单击该单词,将鼠标悬停在“解决选项”上,并添加 System.Data 命名空间。这对我很有效!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接