0

I have a stored procedure name SaveNewSupplier. Just parsing xml and insert values. But when I pass the parameter manually to execute stored procedure it works fine and values properly inserted. I have added it on button click event, here is my code

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();

Here is my app.config file.

<?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>

My Stored Procedure

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

When I am executing this code command.ExecuteNonQuery(); returning 1. but no data inserting in database. I don't get the problem.

Thank you.

4

1 回答 1

2

您的连接字符串使用 |DataDirectory| 替换字符串。这意味着,如果您有 WinForm 应用程序,则通过目录 BIN\DEBUG 或 BIN\RELEASE 中的数据访问代码搜索您的 MDF 文件;如果是 ASP.NET,则在 APP_DATA 目录中搜索您的 MDF 文件。

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

实际上 ExecuteNonQuery 返回 1 表示插入了一条记录。但不是你正在看的地方

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

于 2013-05-27T19:29:36.353 回答