存储过程未从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。但数据库中没有数据插入。我不明白这个问题。

谢谢。

存储过程未从c#窗口应用程序执行

您的连接字符串使用|DataDirectory|替换字符串。这意味着,如果您有WinForm应用程序,MDF文件将根据目录BIN''DEBUG或BIN''RELEASE中的数据访问代码进行搜索;如果您有ASP.NET.,则根据APP_data目录中的数据存取代码进行搜索

这里有一个常见的错误,因为开发人员向服务器资源管理器添加了一个指向项目文件夹中MDF文件的连接,然后在代码更新/插入/删除BIN''DEBUG文件时使用该连接检查结果。

实际上,ExecuteNonQuery返回1,表示插入了一条记录。但不是你所看到的

您可以通过Sql Server Management Studio将数据库直接添加到SQLExpress中,在配置中更改连接字符串,然后在服务器资源管理器中更新连接,从而解决此问题。