存储过程未从c#窗口应用程序执行
本文关键字:应用程序 执行 窗口 存储过程 | 更新日期: 2023-09-27 18:15:30
我有一个存储过程名称SaveNewSupplier
。只是解析xml并插入值。但是,当我手动传递参数以执行存储过程时,它运行良好,并且正确插入了值。我已经在按钮点击事件上添加了它,这是我的代码
SqlConnection sqlConnection = new SqlConnection(ConfigurationManager.ConnectionStrings["SalesRetailConnectionString"].ConnectionString);
SqlCommand command = new SqlCommand("SaveNewSupplier", sqlConnection);
command.CommandType = CommandType.StoredProcedure;
String xml = "<DocumentElement><Table1><SupName>Madan</SupName><Code>dsad</Code><Type>dddd</Type><Address>5555</Address><Country>india</Country><City>Kol</City><State>WB</State><Nationality>In</Nationality><PhoneNo>00000000</PhoneNo><AlternateNo>ATL</AlternateNo><MobileNo>99999999</MobileNo></Table1></DocumentElement>";
command.Parameters.Add("@pParam", SqlDbType.VarChar).Value = xml;
sqlConnection.Open();
int ret = 0;
ret = command.ExecuteNonQuery();
sqlConnection.Close();
这是我的app.config文件。
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="SalesRetailConnectionString"
connectionString="Data Source=.'SQLEXPRESS;AttachDbFilename=|DataDirectory|'SalesRetail.mdf;Integrated Security=True;User Instance=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
我的存储过程
ALTER PROCEDURE dbo.SaveNewSupplier
(
@pParam varchar(max)
)
AS
begin
declare @SupName varchar(100)
declare @Code varchar(100)
declare @Type varchar(100)
declare @Address varchar(100)
declare @Country varchar(100)
declare @City varchar(100)
declare @State varchar(100)
declare @Nationality varchar(100)
declare @PhoneNo varchar(100)
declare @AlternateNo varchar(100)
declare @MobileNo varchar(100)
declare @XMLData XML
select @XMLData = @pParam
select @SupName = Tbl.Col.value('SupName[1]', 'varchar(100)'),
@Code = Tbl.Col.value('Code[1]', 'varchar(100)'),
@Type = Tbl.Col.value('Type[1]', 'varchar(100)'),
@Address = Tbl.Col.value('Address[1]', 'varchar(100)'),
@Country = Tbl.Col.value('Country[1]', 'varchar(100)'),
@City = Tbl.Col.value('City[1]', 'varchar(100)'),
@State = Tbl.Col.value('State[1]', 'varchar(100)'),
@Nationality = Tbl.Col.value('Nationality[1]', 'varchar(100)'),
@PhoneNo = Tbl.Col.value('PhoneNo[1]', 'varchar(100)'),
@AlternateNo = Tbl.Col.value('AlternateNo[1]', 'varchar(100)'),
@MobileNo = Tbl.Col.value('MobileNo[1]', 'varchar(100)')
from @XMLData.nodes('//Table1') Tbl(Col)
begin
insert into tblSupplierMaster(SupName, Code, Type, Address, Country, City, State, Nationality, PhoneNo, AlternateNo, MobileNo)
values (@SupName, @Code, @Type, @Address, @Country,
@City, @State, @Nationality, @PhoneNo, @AlternateNo, @MobileNo)
end
end
当我执行此代码时,command.ExecuteNonQuery();
返回1。但数据库中没有数据插入。我不明白这个问题。
谢谢。
您的连接字符串使用|DataDirectory|替换字符串。这意味着,如果您有WinForm应用程序,MDF文件将根据目录BIN''DEBUG或BIN''RELEASE中的数据访问代码进行搜索;如果您有ASP.NET.,则根据APP_data目录中的数据存取代码进行搜索
这里有一个常见的错误,因为开发人员向服务器资源管理器添加了一个指向项目文件夹中MDF文件的连接,然后在代码更新/插入/删除BIN''DEBUG文件时使用该连接检查结果。
实际上,ExecuteNonQuery返回1,表示插入了一条记录。但不是你所看到的
您可以通过Sql Server Management Studio将数据库直接添加到SQLExpress中,在配置中更改连接字符串,然后在服务器资源管理器中更新连接,从而解决此问题。