从文件中提供存储过程的输入参数

时间:2016-10-17 06:31:06

标签: c# sql-server stored-procedures

我有一个包含3个参数的存储过程,我认为我没有正确执行存储过程的第一个参数。

string path = @"D:\test2";
var ngd = Directory.EnumerateFiles(path, "*.txt").Select(file => File.ReadAllLines(file)).FirstOrDefault();
using (SqlConnection connection = new SqlConnection("Data Source=;Initial Catalog=;User ID=;Password="))
{
    using (SqlCommand cmd = new SqlCommand("usp_SaveData", connection))
    {
        try
        {
            await Task.Delay(1500);
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@request_xml", SqlDbType.NVarChar, 999999).Value = ngd;
            cmd.Parameters.Add("@ST", SqlDbType.NVarChar, 50).Value = MachineName;
            cmd.Parameters.Add("@SN", SqlDbType.NVarChar, 50).Value = listBoxItem;
            cmd.ExecuteNonQuery();
            MessageBox.Show("Good");
            connection.Open();
        }
        catch
        {
            MessageBox.Show("Verification failed!");
        }
    }
}

我在SQL中运行了我的存储过程并且一切正常,我运行了一个只需要@ST@SN的不同过程并且它有效但现在在此过程中我给{{1作为

request_xml

它不起作用......

我的问题是,我应该将文件中的数据以不同的方式存储在变量中吗?是否有“正确的方法”将文件存储在输入参数可以使用的变量中?

1 个答案:

答案 0 :(得分:3)

问题是您使用的ReadAllLines返回array string,其中每个元素都是文件中的一行。

所以在下面的一行中你实际上传递的是string[]而不是string

cmd.Parameters.Add("@request_xml", SqlDbType.NVarChar, 999999).Value = ngd;

您应该使用ReadAllText代替string

var ngd = Directory.GetFiles(path, "*.txt").Select(file => File.ReadAllText(file)).FirstOrDefault();