0

事前に重要な情報:

Access 2003 Database (*.mdb)
Table is Linked to SQL Server 2005 Database --> Table
When linked to another Access Database --> Table it works

Program which i use to update : .net 2.0 based C#
Databaselanguage: German?
OleDbConnection used:
 Connection = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;" +
                                                 "Data Source=" + PathToDatabase + ";" +
                                                 "Jet OLEDB:System Database=" + PathToSystemFile+ ";" +
                                                 "User ID=" + SignedUserID + ";" +
                                                 "Password=" + SignedLoginKey + ";");

問題:

次のような SQL-Update ステートメントに正常に解析された文字列を更新したいと思います。

UPDATE [Artikel] SET [Artikelbeschreibung]='УБИТЬ ДРОЗДА 4 СЕРИИ' WHERE products_id=32501;

私のテーブル [アーティケル] には、文字列を更新したときに要件 (products_id=32501) を満たした行が含まれており、スローされたエラーや例外はありません。データベースに到着したものを確認すると、次のようにしか表示されません。

????? ?????? 4 ?????

ファイルからのエンコーディングはUTF8です。私はすでにこれを試しましたが、うまくいきませんでした: Convert ANSI (Windows 1252) to UTF8 in C#

ここで私のプログラムが行う手順:

 1. Load a file containing the sql statement with placeholder / information in which file, which section, which key the right information will be
  EXAMPLE: UPDATE [Artikel] SET [Artikelbeschreibung]='<<C:\myfile.ini::MySection::MyKey>>' WHERE products_id=32501;

 2. Grab Placeholder / Information
  NOW I HAVE: <<C:\myfile.ini::MySection::MyKey>>

 3. Parse, open File, Search for Section, Search for Key, responding Value of Key as String
  RESPONSE = УБИТЬ ДРОЗДА 4 СЕРИИ

 4. Replace <<C:\myfile.ini::MySection::MyKey>> with УБИТЬ ДРОЗДА 4 СЕРИИ in Original SQL Statement
  RESULT: UPDATE [Artikel] SET [Artikelbeschreibung]='УБИТЬ ДРОЗДА 4 СЕРИИ' WHERE products_id=32501;

 5. Take the string with the Result, open OleDbConnection with Connection as described above and
    do this:
    Connection.Open();
                if (Connection != null)
                {
                    Command = null;
                    Command = Connection.CreateCommand();
                    Command.CommandText = SQL;
                    Command.ExecuteNonQuery();
                    Connection.Close();
                    Connection = null;
                }

 6. Looking into my Database there is only '????? ?????? 4 ?????' instead of 'УБИТЬ ДРОЗДА 4 СЕРИИ'

 Additional Informations: This Only occurs when my Table is linked to a SQL Server, when Table is linked to another Database or is Database directly it works fine.

誰かがこれを手伝ってくれるかもしれませんが、エラーがどこにあるのかわかりません。

さらに情報が必要な場合は、書いてください。「編集」を介して、そのようなドキュメントをできるだけ早く試します。

4

1 に答える 1

0

次の 2 つのオプションがあります。

  1. に移動しRegional Options、非 Unicode プログラムのロケールをキリル文字を使用するロケールに設定します。

  2. キリル文字列をユニコードに変換する

    UnicodeFromValキリル文字の最初の Unicode 文字の値を設定する必要があります。

    Public Function AsUnicode(ByVal Source As String, UnicodeFromVal As Long) As String 
    Dim c As Long
    Dim ByteString() As Byte
    Dim AnsiValue As Integer
    Dim Length As Long
    Length = Len(Source)
    ByteString = StrConv(Source, vbFromUnicode, GetSystemDefaultLCID())
    For c = LBound(ByteString) To UBound(ByteString)
        AnsiValue = ByteString(c)
        If AnsiValue >= 224 And AnsiValue <= 250 Then
            AsUnicode= AsUnicode & ChrW(CLng(AnsiValue - 224 + UnicodeFromVal))
        Else
            AsUnicode= AsUnicode & ChrW(AnsiValue)
        End If
    Next
    End Function
    
于 2013-06-30T07:04:10.763 に答える