我的行结构看起来像 ID bigint、ScanRept XML
我想结束一个名为 4.xml 的文件,其中仅包含 ID 号为 4 的 ScanRept 列中的 xml。
我不想以交互方式进行(通过进入 Manager Studio,找到行,右键单击该字段并执行另存为) - 如果我找不到更好的方法,我会这样做。
我确实有可用的 C#;如果这对 sqlcmd 可行,那是我的偏好(因为可能会有很多我现在无法预料的变化)。
我的行结构看起来像 ID bigint、ScanRept XML
我想结束一个名为 4.xml 的文件,其中仅包含 ID 号为 4 的 ScanRept 列中的 xml。
我不想以交互方式进行(通过进入 Manager Studio,找到行,右键单击该字段并执行另存为) - 如果我找不到更好的方法,我会这样做。
我确实有可用的 C#;如果这对 sqlcmd 可行,那是我的偏好(因为可能会有很多我现在无法预料的变化)。
可能有更好的方法来做到这一点......但如果不测试这样的东西可能会起作用。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();
}
命令行方法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
谢谢你们俩-很好的提示
Panos,它会在一定长度后截断 - 即 258 个字符?
Toytown,除了 writer.WriteRaw() 是我需要的,否则它会编码 XML 标记以使其成为有效数据,例如,< 变成 & lt 分号
到目前为止,除了一个长长的 xml 流(没有缩进,没有换行符)之外,我什么也得不到。我不确定我的数据中是否有任何格式化空格,但我知道当我右键单击 SSMS 中的字段时,它会打开 MS XML 编辑器,显示它的所有格式都很漂亮。
好吧,正如法国人所说,“那个该死的 XML 对我的法语 Too-SHEE 来说是一种痛苦”。您的两条评论都有帮助,一旦我在这个 dang open id 事物上注册,我就会为您的答案投票。
这是另一种让它写得很漂亮的方法,就像热法国女孩喜欢的方式:
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) ;