0

ID bigint、ScanRept XML のような行構造を取得しました

ID 番号が 4 の ScanRept 列の xml だけを含む 4.xml という名前のファイルを作成したいと考えています。

対話的に (Manager Studio に移動して行を見つけ、フィールドを右クリックして [名前を付けて保存] を実行する) やりたくありません。

私は C# を利用できます。これが sqlcmd で実行できる場合、それが私の好みです (おそらく、今は予測できない多くのバリエーションがあるからです)。

4

4 に答える 4

0

ホットフランチャイズの女の子が好きなように、きれいに書き出す別のアプローチを次に示します。

        string IRIXno = args[0] ;

        string connectionString ;

        string query = "Select ID, Report FROM Reports WHERE id =" + IRIXno;

        try

        {

            connectionString = ConfigurationSettings.AppSettings["ConnectionString"];

        }

        catch

        {

            Console.WriteLine("YOur connection string isn't set or something.");

            return;

        }

        SqlConnection conn = new SqlConnection(connectionString);

        conn.Open();

        SqlCommand sqlComm = new SqlCommand(query, conn);

        sqlComm.CommandType = CommandType.Text;

        SqlDataReader reader = sqlComm.ExecuteReader();

        reader.Read(); // one and only row

        XmlDocument doc = new XmlDocument();

        XmlReader xmlReader = reader.GetSqlXml(1).CreateReader() ;//second column is our guy

        doc.Load(xmlReader); 


        string outfile = "H:\\" + IRIXno + ".xml";

        doc.Save(outfile) ;
于 2008-11-07T21:43:34.883 に答える
0

コマンドラインアプローチbcp

bcp "SELECT ScanRept FROM <DBName>.dbo.<TableName> WHERE ID = 4" queryout 4.xml -c -S<ServerName> -U<UserName> -P<Password>

または信頼できる接続の場合

bcp "SELECT ScanRept FROM <DBName>.dbo.<TableName> WHERE ID = 4" queryout 4.xml -c -S<ServerName> -T

コマンドラインアプローチsqlcmd

sqlcmd -U<Username> -P<Password> -S<ServerName> -h -1 -Q "SET NOCOUNT ON SELECT ScanRept FROM <DBName>.dbo.<TableName> WHERE ID = 4;" -o 4.xml

または信頼できる接続の場合

sqlcmd -E -S<ServerName> -h -1 -Q "SET NOCOUNT ON SELECT ScanRept FROM <DBName>.dbo.<TableName> WHERE ID = 4;" -o 4.xml
于 2008-11-07T17:41:41.563 に答える
0

おそらくこれを行うためのより良い方法があります...しかし、このようなものをテストしなくてもうまくいくかもしれません.C#

SqlDataAdapter adapter = new SqlDataAdapter("SELECT ID, ScanRept FROM TableName", "connString");
DataTable dt = new DataTable();
adapter.Fill(dt);

foreach (DataRow row in dt.Rows)
{
    string type = row["ID"].ToString();
    string location = "C\\" + type + ".xml";
    string xml = row["ScanRept"].ToString();
    XmlTextWriter writer = new XmlTextWriter(location, null);
    writer.WriteString(xml);
    writer.Flush();
    writer.Close();
}
于 2008-11-07T13:36:10.857 に答える
0

お二人ともありがとう - 良いヒント

パノス、特定の長さの後に切り捨てられます-258文字ですか?

私が必要としているのは writer.WriteRaw() である以外は動作します。そうでない場合は、XML マークアップをエンコードして有効なデータにします。たとえば、< はアンパサンド lt セミコロンに変換されます。

これまでのところ、xml の 1 つの長いストリームしか取得できません (インデントも改行もありません)。データに書式設定の空白があるかどうかはわかりませんが、SSMS でフィールドを右クリックすると、MS XML エディターが表示され、すべてがきれいに書式設定されていることがわかります。

まあ、フランス人が言うように、「その気の利いた XML はフランス人のトゥーシーにとって苦痛だ」。あなたのコメントは両方とも役に立ちます。このオープン ID に登録したら、あなたの回答に投票します。

于 2008-11-07T18:12:45.493 に答える