Announcement

Collapse
No announcement yet.

Unicodes in Datenbank Speichern?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Unicodes in Datenbank Speichern?

    Hallo,

    weiss jemand hier. wie ich die Unicodes in Datenbank(MSSQL) Speichern kann?

    Momentan bekomme ich nachdem Speichern nur laute ????? ??.

    Danke im Voraus.

    Smart

  • #2
    Deine Spalten müssen als n(var)char angelegt sein. (var)char kann nur 8-Bit-Charaters speichern

    Comment


    • #3
      Hallo,

      danke für deine Antwort.

      Es hat nicht daran gelegen. Die Unicodes werden immer noch als ???? gespeichert.
      Ich habe auch in meiner Datenbank Memo(text)-Felder. Da bekomme ich auch nur ????. Bei ntext auch.

      Danke
      Smar

      Comment


      • #4
        Wie greifst Du auf den MS-SQL-Server zu?
        Hoffentlich nicht über den Umweg ODBC

        Comment


        • #5
          Hi,

          ja das ist eine ODBC-Verbindung. Ich wüsste nicht, wie ich es anders lösen kann.

          "server=A8DRKWAU; database=DatenbankName; Trusted_Connection=yes"

          Gibt es einen anderen Weg? Kannst du es mir bitte detaliert beschreiben?

          Smar

          Comment


          • #6
            Für ADO.NET gibt es native Zugriffskomponenten für den MS-SQL-Server. Diese heißen z.B. SQLConnection (statt ODBCConnection) usw. Die Verwendung ist eigentlich identisch mit den ODBC-Komponenten, jedoch greifen sie ohne ODBC auf die MS-Datenbank zu

            Comment


            • #7
              Hallo,

              hmmm, die benutze ich bereits:

              Z.B.
              Private objConn As New System.Data.SqlClient.SqlConnection(sConn)
              Private objReader As System.Data.SqlClient.SqlDataReader

              Private sSQL As String = "Select Counter From Zugang"
              Private objCmd As New System.Data.SqlClient.SqlCommand(sSQL, objConn)

              Ja, das klappt aber so auch nicht.

              Smar

              Comment


              • #8
                Dann habe ich auch keine weiteren Ideen mehr auf Lager:-

                Comment


                • #9
                  Hallo,

                  wie sieht das Problem an einem praktischen Beispiel aus? Ich kann alle möglichen Zeichen über den folgenden Weg speichern und auch im ASP.NET Web Form wieder anzeigen:
                  <pre>
                  <b>USE</b> tempdb
                  <b>GO</b>
                  <br>
                  <b>CREATE</b> <b>TABLE</b> UNICODETEST
                  (
                  recid <b>INTEGER</b> <b>NOT</b> <b>NULL</b> <b>IDENTITY</b> <b>PRIMARY</b> <b>KEY</b>,
                  wert NVARCHAR(9) <b>NOT</b> <b>NULL</b>
                  )
                  <b>GO</b>
                  <br>
                  <b>CREATE</b> <b>PROCEDURE</b> spInsert
                  (
                  @wert NVARCHAR(9)
                  )
                  <b>AS</b>
                  <b>INSERT</b> <b>INTO</b> dbo.UNICODETEST (wert) <b>VALUES</b> (@wert)
                  <b>RETURN</b> @@ROWCOUNT
                  <b>GO</b>
                  </pre>

                  <pre>
                  Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
                  SqlConnection1.Open()
                  SqlCommand1.Parameters(1).Value = TextBox1.Text
                  SqlCommand1.ExecuteNonQuery()
                  SqlDataAdapter1.Fill(DataSet11)
                  DataBind()
                  SqlConnection1.Close()
                  End Sub
                  </pre>

                  <pre>
                  ...
                  '
                  'SqlCommand1 (wurde von VS.NET automatisch konfiguriert)
                  '
                  Me.SqlCommand1.CommandText = "[spInsert]"
                  Me.SqlCommand1.CommandType = System.Data.CommandType.StoredProcedure
                  Me.SqlCommand1.Connection = Me.SqlConnection1
                  Me.SqlCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@RETURN_VALUE" ,
                  System.Data.SqlDbType.Int, 4, System.Data.ParameterDirection.ReturnValue, False,
                  CType(0, Byte), CType(0, Byte), "", System.Data.DataRowVersion.Current, Nothing))
                  Me.SqlCommand1.Parameters.Add(New System.Data.SqlClient.SqlParameter("@wert",
                  System.Data.SqlDbType.NVarChar, 9))
                  ...
                  </pre&gt

                  Comment


                  • #10
                    Hi,

                    danke für deine Bemühung.
                    Bei mir sieh es etwas einfacher aus:

                    Private objConn As New System.Data.SqlClient.SqlConnection(sConn)
                    Private objReader As System.Data.SqlClient.SqlDataReader
                    Private sSQL As String = "Inser into Test values('1','2','3')"
                    Private objCmd As New System.Data.SqlClient.SqlCommand(sSQL, objConn)

                    objCmd.ExecuteNonQuery()

                    Naja, das ist eingentlich alles, was man dazu brauch, um einen Datenstaz zu speichern.
                    Wie bereits erwähnt, bekomme ich nur laute ?? in der Tabelle geschrieben.

                    Gibt es einen Weg einen String in UTF8 Zeichen umzuwandeln? Vielleich kann die Daten so abspeichern?

                    MfG
                    Smar

                    Comment


                    • #11
                      So funktioniert es: vor die Texte mit Unicode-Zeichen ein N (für Native?) setzen. Beispiel:

                      <PRE>

                      string strSql = "Update AlarmTexts SET AlarmText=N'" + strText + "' WHERE LanguageID='" + strLangId + "' AND AlarmId='" + strTextId + "'";

                      <PRE&gt

                      Comment


                      • #12
                        Oder als Parameter übergeben (Wie das in ASP.NET geht weiß ich nicht, kenn nur die Lösung in Delphi). Aber mit Parameter wärst Du auch gegenüber SQL-Injection geschützt

                        Comment


                        • #13
                          Hallo Bernhard,

                          die Parameter-Lösung hatte ich schon vorgestellt - siehe meine Antwort vom 10.09.2004, 06:19 Uh

                          Comment


                          • #14
                            Hallo Andreas,

                            manchmal übersieht einige Dinge :-

                            Comment

                            Working...
                            X