DOBON.NETプログラミング道掲示板

■34172 / 1階層)  ポルトガル語の登録
□投稿者/ 魔界の仮面弁士 大御所(1209回)-(2019/02/28(Thu) 19:18:02)
  • アイコン
    No34169に返信(あばば無人君さんの記事)
    > DBに登録するとポルトガル語のアクセント記号が消えてアルファベットのみになってしまいます。
    
    SqlParameter の SqlDbType が Text になっていたりはしませんか?
    
    たとえば下記の場合、
    パターン 1 と 3 では正常に書き込まれますが、
    パターン 2 の時にはアクセント記号が失われます。
    
    
    using Dapper;
    using System.IO;
    using System.Data;
    using System.Data.SqlClient;
    using System.Linq;
    using System.Text;
    
    /*
    CREATE TABLE Test (
      Id int NOT NULL PRIMARY KEY,
      Message nvarchar(MAX) NULL
    )
    */
    namespace ConsoleApp01
    {
        class Program
        {
            static void Main()
            {
                string 葡語 = "Com licen\u00E7a, voc\u00EA pode falar Portugu\u00EAs?";
    
                string sql = "INSERT INTO Test (Id, Message) VALUES (@Id, @Message)";
    
                using (var con = new SqlConnection(Properties.Settings.Default.ConnectionString))
                {
                    con.Open();
                    con.Execute("TRUNCATE TABLE Test");
    
                    // パターン1
                    con.ExecuteScalar(sql, new { Id = 1, Message = 葡語 });
    
                    // パターン2
                    using (var cmd = con.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.CommandType = CommandType.Text;
                        cmd.Parameters.Add("@Id", SqlDbType.Int).Value = 2;
                        cmd.Parameters.Add("@Message", SqlDbType.Text).Value = 葡語;
                        cmd.ExecuteNonQuery();
                    }
    
                    // パターン3
                    using (var cmd = con.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.CommandType = CommandType.Text;
                        cmd.Parameters.Add("@Id", SqlDbType.Int).Value = 3;
                        cmd.Parameters.Add("@Message", SqlDbType.NText).Value = 葡語;
                        cmd.ExecuteNonQuery();
                    }
    
                    // 確認のため、書き込んだ結果を DataSet に SELECT しなおしてからファイルに保存
                    using (var ds = new DataSet("Example"))
                    using (var adp = new SqlDataAdapter("SELECT * FROM Test ORDER BY Id", con))
                    {
                        adp.Fill(ds, "Test");
    
                        var q = ds.Tables["Test"].AsEnumerable().Select(
                            r => $"{r["Id"]}\t{r["Message"]}");
    
                        File.WriteAllLines(@"C:\TEMP\test.txt", q, Encoding.UTF8);
    
                        ds.WriteXmlSchema(@"C:\TEMP\test.schema.xml");
                        ds.WriteXml(@"C:\TEMP\test.xml");
                    }
    
                    con.Close();
                }
            }
        }
    }

違反を報告
削除キー/

前の記事(元になった記事) 次の記事(この記事の返信)
←ポルトガル語の登録 /あばば無人君 →Re[2]: ポルトガル語の登録 /あばば無人君
 
上記関連ツリー

Nomalアイコン ポルトガル語の登録 / あばば無人君 (19/02/28(Thu) 18:08) #34169
Nomalアイコン ポルトガル語の登録 / 魔界の仮面弁士 (19/02/28(Thu) 19:18) #34172 ←Now
  └Nomalアイコン Re[2]: ポルトガル語の登録 / あばば無人君 (19/03/01(Fri) 10:14) #34173
    └Nomalアイコン Re[3]: ポルトガル語の登録 / 魔界の仮面弁士 (19/03/01(Fri) 10:39) #34174
      └Nomalアイコン Re[4]: ポルトガル語の登録 / 魔界の仮面弁士 (19/03/01(Fri) 11:15) #34175
        └Nomalアイコン Re[5]: ポルトガル語の登録 / あばば無人君 (19/03/01(Fri) 12:02) #34176

All 上記ツリーを一括表示 / 上記ツリーをトピック表示
 
上記の記事へ返信

Mode/  Pass/


- Child Tree -