1

.NET バージョン 4.0 を実行して、SqlDataSource.Insert() を使用してテーブルに INSERT しようとしています。「列 'firstName' に値 NULL を挿入できません...」

マークアップは、テストのために追加した "DefaultValue=" を除いて、SQL ウィザードによって生成されました。そのため、DefaultValue= を指定すると INSERT は機能しますが、これを削除するとエラー メッセージが表示されます。SQL サーバーが不平を言っている列はテーブルの PK であるため、null 値を許容することはできませんが、デバッガーを実行すると、フィールドは SqlDataSource.Insert() への呼び出しの前に入力されます。

私が間違っていることはありますか?

ここにマークアップがあります:-

<h2>
    <asp:Label ID="PageTitle" runat="server"></asp:Label>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
        ConnectionString="<%$ ConnectionStrings:ApplicationServices %>" 
        DeleteCommand="DELETE FROM [profiles] WHERE [firstName] = @firstName" 
        InsertCommand="INSERT INTO [profiles] ([firstName], [lastName], [dateOfBirth], [email]) VALUES (@firstName, @lastName, @dateOfBirth, @email)"
        SelectCommand="SELECT * FROM [profiles] WHERE ([firstName] = @firstName)" 
        UpdateCommand="UPDATE [profiles] SET [lastName] = @lastName, [dateOfBirth] = @dateOfBirth, [email] = @email WHERE [firstName] = @firstName">
        <DeleteParameters>
            <asp:Parameter Name="firstName" Type="String" />
        </DeleteParameters>
        <InsertParameters>
            <asp:Parameter Name="firstName" Type="String"  DefaultValue="Bri"/>
            <asp:Parameter Name="lastName" Type="String" DefaultValue="Moss"/>
            <asp:Parameter DbType="Date" Name="dateOfBirth"  DefaultValue="13/04/1961"/>
            <asp:Parameter Name="email" Type="String"  DefaultValue="bri@hotmail.com"/>
        </InsertParameters>
        <SelectParameters>
            <asp:Parameter DefaultValue="Ken" Name="firstName" Type="String" />
        </SelectParameters>
        <UpdateParameters>
            <asp:Parameter Name="lastName" Type="String" />
            <asp:Parameter DbType="Date" Name="dateOfBirth" />
            <asp:Parameter Name="email" Type="String" />
            <asp:Parameter Name="firstName" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>
</h2>

これは SqlDataSource.Insert() への呼び出しです。. .

protected void ProfileSubmit_Click(object sender, EventArgs e)
{
    Page.Validate();
    if (Page.IsValid) 
    {
        SqlDataSource1.Insert();
    }
}

エラーメッセージは次のとおりです:-

Server Error in '/' Application.
--------------------------------------------------------------------------------
Cannot insert the value NULL into column 'firstName', table 'C:\USERS\KATHARINA\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\HEALTHTRACK\HEALTHTRACK\APP_DATA\ASPNETDB.MDF.dbo.profiles'; column does not allow nulls. INSERT fails.
The statement has been terminated. 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 
Exception Details: System.Data.SqlClient.SqlException: Cannot insert the value NULL into column 'firstName', table 'C:\USERS\KATHARINA\DOCUMENTS\VISUAL STUDIO 2010\PROJECTS\HEALTHTRACK\HEALTHTRACK\APP_DATA\ASPNETDB.MDF.dbo.profiles'; column does not allow nulls. INSERT fails.
The statement has been terminated.
Source Error: 
Line 21:             if (Page.IsValid) 
Line 22:             {
Line 23:                 SqlDataSource1.Insert();
Line 24:             }
Line 25:         }
4

2 に答える 2

0

(挿入)パラメーターにバインドされたフィールドは何ですか?を保持すると機能すると言う場合、それは、対象のパラメーターがnullまたは未解決であったため、の値が使用されているDefaultValueことを意味します。firstnameDefaultValue

逆に、を指定せずDefaultValue パラメーターがnull / undefinedの場合、挿入は失敗します(db列の制限によりnullが許可されないため)。

MSDNサンプルを参照してください

H番目

于 2012-09-20T14:27:42.973 に答える
-1

mossy: 接続文字列の問題ではありません。データベースが最初から接続されていなかった場合です。データベースに接続しているため、テーブルに null 値を挿入できないというエラーが発生します。データベース テーブルの列firstNameにnull を許可します。

于 2012-09-20T14:22:24.847 に答える