【问题标题】:C# ASP.NET (VS 2008) DB ignores INSERT if it contains Hebrew characters如果 C# ASP.NET (VS 2008) DB 包含希伯来语字符,则它会忽略 INSERT
【发布时间】:2012-04-20 20:22:33
【问题描述】:

目前我正在为学校做一个项目,但我无法解决这个问题。

我有一个表单,如果您向其中插入英文字符,它可以正常工作,并且信息会插入到数据库中,但是如果我插入希伯来字符 (@form),则不会发生任何事情。

现在,澄清一下,我已经测试了 100%,即使我插入希伯来字符,它也会进入包含 sql 插入的“if”块。

整个项目由 Visual Studio Web Developer 2008 管理。

如果我手动插入希伯来语书写的值,数据库能够存储它们并输出,但是当尝试更新这些单元格 (@form) 时,希伯来语中的所有字符都会变成问号。

谁能帮帮我?我真的很感激。

谢谢,伙计

编辑:

这是我的插入查询:(错误是 List<string>,接下来是 MyAdoHelper.cs)

if (Errors.Count == 0)
{
      string Add_Member = "INSERT INTO members (name, password, email, gender, registration_date) VALUES ('" + Nickname + "', '" + Password + "', '" + Email + "', '" + Gender + "', '" + DateTime.Now.ToString() + "')";

      MyAdoHelper.DoQuery(GlobalVar.DatabaseName, Add_Member);

      Errors.Add(GlobalVar.GlobalStatus["Register_Success"]);
}

MyAdoHelper.cs:

public class MyAdoHelper
{
    public MyAdoHelper()
    {
    }

    public static SqlConnection ConnectToDb(string fileName)
    {
        string path = @"C:\Users\Guy\Desktop\Project\App_Data\";
        path += fileName;
        string connString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=" +
                             path +
                             ";Integrated Security=True;User Instance=True";
        SqlConnection conn = new SqlConnection(connString);
        return conn;
    }

    public static void DoQuery(string fileName, string sql)
    {
        SqlConnection conn = ConnectToDb(fileName);
        conn.Open();
        SqlCommand com = new SqlCommand(sql, conn);
        com.ExecuteNonQuery();
        com.Dispose();
        conn.Close();
    }

    public static int RowsAffected(string fileName, string sql)       
    {
        SqlConnection conn = ConnectToDb(fileName);
        conn.Open();
        SqlCommand com = new SqlCommand(sql, conn);
        int rowsA = com.ExecuteNonQuery();
        conn.Close();
        return rowsA;
    }

    public static bool IsExist(string fileName, string sql)
    {
        SqlConnection conn = ConnectToDb(fileName);
        conn.Open();
        SqlCommand com = new SqlCommand(sql, conn);
        SqlDataReader data = com.ExecuteReader();
        bool found;
        found = (bool)data.Read();

        conn.Close();
        return found;
    }

    public static DataTable ExecuteDataTable(string fileName, string sql)
    {
        SqlConnection conn = ConnectToDb(fileName);
        conn.Open();
        SqlDataAdapter tableAdapter = new SqlDataAdapter(sql, conn);
        DataTable dt = new DataTable();
        tableAdapter.Fill(dt);
        return dt;
    }

    public static void ExecuteNonQuery(string fileName, string sql)
    {
        SqlConnection conn = ConnectToDb(fileName);
        conn.Open();
        SqlCommand command = new SqlCommand(sql, conn);
        command.ExecuteNonQuery();
        conn.Close();
    }

    public static int CountTableRows(string TableName)
    {
        SqlConnection Conn = MyAdoHelper.ConnectToDb(GlobalVar.DatabaseName);
        Conn.Open();
        string TotalRows = "SELECT COUNT(*) FROM " + TableName;
        SqlCommand Cmd = new SqlCommand(TotalRows, Conn);
        return (int)Cmd.ExecuteScalar();
    }
}

【问题讨论】:

  • 你能发布一个代码示例吗?没有代码很难进行故障排除。这可能是简单的事情,比如不使用参数化查询,以及导致冲突的意外字符(例如,无意的 sql 注入),所以最好排除这一点和其他简单的事情。
  • 如果是 SQL 数据库,是否设置为使用希伯来语代码页?
  • 如果您手动插入希伯来语值,它可以正常工作,并且您也可以显示它们,但是当我通过表单更新它们时,它会变为 ???,或者没有任何内容发送到数据库。在网站上显示希伯来语也可以。将其发送到数据库时出现问题,例如它不接受字符,并忽略我的请求。

标签: database visual-studio-2008 encode


【解决方案1】:

如果你使用 microsoft sql server,试试这样的。

INSERT INTO tabelle (Spalte) VALUES (N'äüö');

还要确保你使用nvarchar

【讨论】:

  • 感谢您的帮助。我确实使用 nvarchar,(Splate)在做什么?
  • 我已经尝试过您的解决方案,但它仍然没有插入希伯来语值。
  • 这只是一个例子。如果您插入一个值,请使用 N'value'。 N 会帮助你 ;)
  • 哈哈,刚刚翻译了,现在明白了:)我现在试试
【解决方案2】:

我认为,您在数据库中将 nvarchars 用于希伯来字符字段...

【讨论】:

  • 是的,这是导致问题的原因吗? (nvarchar(50))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多