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;
    }
4

7 回答 7

12

C# 区分大小写...尝试使用智能感知。

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(); 
          }
        }
     }
于 2012-06-22T16:27:49.970 回答
7

SqlDbType 中的 s 需要大写!

于 2012-06-22T16:27:31.867 回答
3
yes but theres no any case sensitivity problem know 

您实际上确实有语法错误,因为您使用s而不是S. 此外,SqlCommand 没有调用方法,Open()也没有用于Close()

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

于 2012-06-22T16:50:46.313 回答
2

你有更多的错误。

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

根据您的新来源进行编辑:

  • 错误“DatabaseConnector'不包含'Open'的定义”可以通过编写con.Connect()而不是更正con.Open()
  • 但是,另一个错误,即它没有“Close()”函数,无法更正 - 无法告诉它关闭连接。

这是你自己的代码吗?

于 2012-06-22T16:33:20.617 回答
1

你在使用The Code Project制作的课程吗?

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

于 2012-06-22T16:48:04.547 回答
1

如果您使用大写字母 'S' 编写,但仍然出现相同的错误,尤其是在 Visual Studio 2015 中,那么不要编写 'SqlDbType' ,而是编写:System.Data.SqlDbType

例如:

  param[0] = new SqlParameter("@Name", System.Data.SqlDbType.VarChar,50);
于 2015-09-16T07:58:47.517 回答
0

SqlDbType 中的大写“S”,更正后,右键单击该单词,将鼠标悬停在解析选项上并添加 System.Data 命名空间。为我工作!

于 2013-09-17T05:04:10.250 回答