[英]parse and load text file into DB using C# and Stored Procedure
我遇到持續錯誤的問題
“正在尋找過程或函數'Cup_INSFuneralHome'期望未提供參數'@funeralhomename'。”
我進行了無數次改動,但沒有任何效果,因此我不得不從錯誤的區域中尋找。
當我調試時,好像它以正確的順序提取正確的信息。 原始文本文件的格式為:
公司名
地址
郵政編碼
電話
我對此很固執。 我瀏覽了其他帖子,但無法找到我需要的內容,也無法從眾多“有點”相似的帖子中提取我需要的內容。 恐怕問題就在我眼前,但我看不到它。 我需要新鮮的眼睛。 所以我提前道歉
proc代碼:
ALTER procedure [dbo].[Cup_INSFuneralHome]
@funeralhomename nvarchar(50),
@addressone nvarchar(50),
@addresstwo nvarchar(50),
@CityName nvarchar(50),
@State nvarchar(10),
@Zipcode nchar(10),
@Telephone nchar(15),
@PrimaryContact nvarchar (50),
@EmailAddress nvarchar (50)
as
declare @cityid uniqueidentifier
declare @stateid uniqueidentifier
select @cityid = (select cityid from [city] where CityName=(@CityName))
select @stateid = (select stateid from [State] where StateCode=ltrim(rtrim(@State)))
insert funeralhome(funeralhomename, addressone, addresstwo, cityid, stateid, zipcode, telephone, PrimaryContact, EmailAddress)
values (@funeralhomename, @addressone, @addresstwo, @CityName, @State, @ZipCode, @Telephone, @PrimaryContact, @EmailAddress)
C#代碼:
namespace abc
{
class Program
{
static void Main(string[] args)
{
address myclass = new address();
string dbConnection = "xyz";
string path = "D:\\docs\\someDocument.txt";
StreamReader sr = new StreamReader(path);
int intcount=0;
string sLine = "";
ArrayList fhome = new ArrayList();
ArrayList Ads = new ArrayList();
while (sLine != null)
{
sLine = sr.ReadLine();
if (sLine != null)
fhome.Add(sLine);
intcount=intcount+1;
}
sr.Close();
int startcount=0;
for (int n = 0; n < fhome.Count; n++)
{
char[] delim = {',', ' '};
try
{
if (startcount == 0)
{
myclass = new address();
}
if (fhome[n].ToString().Trim().Length > 0)
{
if (!fhome[n].ToString().Contains("Funeral Home Profile"))
{
switch (startcount)
{
case 0:
myclass.company = fhome[n].ToString().Trim();
startcount = startcount + 1;
break;
case 1:
myclass.address1 = fhome[n].ToString().Trim();
startcount = startcount + 1;
break;
case 2:
myclass.address2 = fhome[n].ToString().Trim();
startcount = startcount + 1;
break;
case 3:
myclass.telephone = fhome[n].ToString().Trim();
startcount = 0;
Ads.Add(myclass);
break;
}
}
}
}
catch { }
}
SqlConnection conn = new SqlConnection(dbConnection);
for(int n=0;n< Ads.Count;n++)
{
address tclass = (address)Ads[n];
int comloc;
comloc = tclass.address2.IndexOf(",");
string funeralhomename = tclass.company.ToString();
string street = tclass.address1.ToString();
string street2 = "";
string city = tclass.address2.Substring(0, comloc);
string state = tclass.address2.Substring(comloc + 1, 3);
string zip = tclass.address2.Substring(comloc + 4);
string tel = tclass.telephone.Replace("Local:", "");
string PrimaryContact = "";
string EmailAddress = "";
string tsql = "";
tsql = (funeralhomename + ',' +
street + ',' + street2 + city + ',' +
state + zip + tel + PrimaryContact + EmailAddress);
conn.Open();
try
{
SqlCommand cmd = new SqlCommand("Cup_INSFuneralHome", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] param = new SqlParameter[9];
param[0] = new SqlParameter("@funeralhomename", SqlDbType.NVarChar);
param[0].Value = funeralhomename;
param[1] = new SqlParameter("@addressone", SqlDbType.NVarChar);
param[1].Value = street;
param[2] = new SqlParameter("@addresstwo", SqlDbType.NVarChar);
param[2].Value = street2;
param[3] = new SqlParameter("@cityname", SqlDbType.NVarChar);
param[3].Value = city;
param[4] = new SqlParameter("@State", SqlDbType.NVarChar);
param[4].Value = state;
param[5] = new SqlParameter("@zipCode", SqlDbType.NChar);
param[5].Value = zip;
param[6] = new SqlParameter("@Telephone", SqlDbType.NChar);
param[6].Value = tel;
param[7] = new SqlParameter("@PrimaryContact", SqlDbType.NVarChar);
param[7].Value = PrimaryContact;
param[8] = new SqlParameter("@EmailAddress", SqlDbType.NVarChar);
param[8].Value = EmailAddress;
cmd.ExecuteNonQuery();
}
catch
{
Debug.Print("Error with.." + tclass.company);
}
finally
{
conn.Close();
}
Debug.Print(tsql);
}
}
}
}
public class address
{
private string _company;
private string _address1;
private string _address2;
private string _telephone;
public string company
{
get { return _company; }
set { _company = value; }
}
public string address1
{
get { return _address1; }
set { _address1 = value; }
}
public string address2
{
get { return _address2; }
set { _address2 = value; }
}
public string telephone
{
get { return _telephone; }
set { _telephone = value; }
}
}
您沒有將sql參數添加到cmd
對象;-)
看起來您需要在執行查詢之前將參數添加到查詢中。
您可以這樣快捷:
cmd.Parameters.Add("@thing", SqlDbType.Type).Value = value;
在您的情況下:
cmd.Parameters.Add("@funeralhomename", SqlDbType.NVarChar).Value = funeralhomename;
cmd.Parameters.Add("@addressone", SqlDbType.NVarChar).Value = street;
cmd.Parameters.Add("@addresstwo", SqlDbType.NVarChar).Value = street2;
cmd.Parameters.Add("@cityname", SqlDbType.NVarChar).Value = city;
cmd.Parameters.Add("@State", SqlDbType.NVarChar).Value = state;
cmd.Parameters.Add("@zipCode", SqlDbType.NChar).Value = zip;
cmd.Parameters.Add("@Telephone", SqlDbType.NChar).Value = tel;
cmd.Parameters.Add("@PrimaryContact", SqlDbType.NVarChar).Value = PrimaryContact;
cmd.Parameters.Add("@EmailAddress", SqlDbType.NVarChar).Value = EmailAddress;
您創建SqlParameter []參數,但是該集合不是SqlCommand執行過程時使用的集合。 擺脫整個集合,而使用命令的Parameter屬性。
cmd.Parameters.AddWithValue("@funeralhomename", funeralhomename)
然后使用查詢中的所有參數
您需要使用SqlCommand.Parameters.AddRange方法將參數添加到SqlCommand對象:
SqlCommand cmd = new SqlCommand("Cup_INSFuneralHome", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter[] param = new SqlParameter[9];
param[0] = new SqlParameter("@funeralhomename", SqlDbType.NVarChar);
param[0].Value = funeralhomename;
param[1] = new SqlParameter("@addressone", SqlDbType.NVarChar);
param[1].Value = street;
param[2] = new SqlParameter("@addresstwo", SqlDbType.NVarChar);
param[2].Value = street2;
param[3] = new SqlParameter("@cityname", SqlDbType.NVarChar);
param[3].Value = city;
param[4] = new SqlParameter("@State", SqlDbType.NVarChar);
param[4].Value = state;
param[5] = new SqlParameter("@zipCode", SqlDbType.NChar);
param[5].Value = zip;
param[6] = new SqlParameter("@Telephone", SqlDbType.NChar);
param[6].Value = tel;
param[7] = new SqlParameter("@PrimaryContact", SqlDbType.NVarChar);
param[7].Value = PrimaryContact;
param[8] = new SqlParameter("@EmailAddress", SqlDbType.NVarChar);
param[8].Value = EmailAddress;
cmd.Parameters.AddRange(param );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.