我有一个包含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
它不起作用......
我的问题是,我应该将文件中的数据以不同的方式存储在变量中吗?是否有“正确的方法”将文件存储在输入参数可以使用的变量中?
答案 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();