Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用存储过程将数据类型nvarchar转换为int时出错_C#_Asp.net_Sql Server_Visual Studio_Stored Procedures - Fatal编程技术网

C# 使用存储过程将数据类型nvarchar转换为int时出错

C# 使用存储过程将数据类型nvarchar转换为int时出错,c#,asp.net,sql-server,visual-studio,stored-procedures,C#,Asp.net,Sql Server,Visual Studio,Stored Procedures,我知道这是一个相当常见的错误,但我似乎找不到问题的根源。由于必须在两个不同的表中输入数据,因此我试图使用存储过程添加学生的详细信息,但出现以下错误: System.Data.dll中发生“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理 其他信息:将数据类型nvarchar转换为int时出错 在'myCommand.ExecuteOnQuery()上 ASP.NET: <asp:SqlDataSource ID="courselist"

我知道这是一个相当常见的错误,但我似乎找不到问题的根源。由于必须在两个不同的表中输入数据,因此我试图使用存储过程添加学生的详细信息,但出现以下错误:

System.Data.dll中发生“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理

其他信息:将数据类型nvarchar转换为int时出错

在'myCommand.ExecuteOnQuery()上

ASP.NET

<asp:SqlDataSource ID="courselist" runat="server" 
     ConnectionString='<%$ ConnectionStrings:ConnectionString %>' 
     SelectCommand="SELECT [course_name], [course_id] FROM [courses]">
</asp:SqlDataSource>
<asp:SqlDataSource ID="yearlist" runat="server" 
     ConnectionString='<%$ ConnectionStrings:ConnectionString %>' 
     SelectCommand="SELECT [year_id], [year_title] FROM [year]">
</asp:SqlDataSource>
<asp:SqlDataSource ID="advisor_tutor_list" runat="server" 
     ConnectionString='<%$ ConnectionStrings:ConnectionString %>'  
     SelectCommand="SELECT DISTINCT staff_records.f_name + ' ' + staff_records.l_name AS Name, staff_records.user_id FROM courses INNER JOIN staff_records ON courses.school = staff_records.school_id WHERE (courses.course_id = @course_id)">
     <SelectParameters>
        <asp:Parameter Name="course_id"></asp:Parameter>
    </SelectParameters>
</asp:SqlDataSource>
<asp:SqlDataSource ID="status_list" runat="server" 
     ConnectionString='<%$ ConnectionStrings:ConnectionString %>' 
     SelectCommand="SELECT [status_id], [status] FROM [status]">
</asp:SqlDataSource>
<asp:SqlDataSource ID="current_academic_year" runat="server"  
     ConnectionString='<%$ ConnectionStrings:ConnectionString %>' 
     SelectCommand="SELECT [academic_year] FROM [academic_year]">
</asp:SqlDataSource>
<div class="row">
    <div class="col-12">
        <h1>Add Student Record</h1>
        <h5 class="subheading">Please use the form below to add a student:</h5>
        <div class="feedback blue" id="feedback" runat="server" visible="false">
            <asp:Label ID="feedback_text" runat="server" Text=""></asp:Label>
        </div>
    </div>
</div>
<div class="row">
    <div class="col-3">
        <img id="img_preview" src="images/default_profile.jpg" />
    </div>
    <div class="col-9">
        <div class="panel">
            <h3>Fill out Student Details:</h3>
            <h5>Profile Image:</h5>
            <asp:FileUpload ID="newimage" runat="server" onpropertychange="changeImg(this.value)" />
            <h5>First Name:</h5>
            <asp:TextBox CssClass="full-width" ID="f_nametext" runat="server"></asp:TextBox>
            <h5>Last Name:</h5>
            <asp:TextBox CssClass="full-width" ID="l_nametext" runat="server"></asp:TextBox>
            <h5>Password:</h5>
            <asp:TextBox ID="p_wordtext" CssClass="inline-button" runat="server"></asp:TextBox>
            <div class="button blue" id="generate_password_button">Create Password</div>
            <h5>Course:</h5>
            <asp:DropDownList CssClass="full-width" ID="courseddl" runat="server" DataSourceID="courselist" DataTextField="course_name" DataValueField="course_id" OnSelectedIndexChanged="courseddl_SelectedIndexChanged" AutoPostBack="true" OnDataBound="courseddl_DataBound"></asp:DropDownList>
            <h5>Year:</h5>
            <asp:DropDownList CssClass="full-width" ID="yearddl" runat="server" DataSourceID="yearlist" DataTextField="year_title" DataValueField="year_id"></asp:DropDownList>
            <h5>Date of Birth:</h5>
            <asp:TextBox ID="dob_calendar" CssClass="datepicker full-width" runat="server"></asp:TextBox>
            <h5>Part Time / Full Time Status:</h5>
            <asp:DropDownList CssClass="full-width" ID="enrolmentddl" runat="server">
                <asp:ListItem>Full Time</asp:ListItem>
                <asp:ListItem>Part Time</asp:ListItem>
            </asp:DropDownList>
            <h5>Personal Tutor:</h5>
            <asp:DropDownList ID="tutorddl" CssClass="full-width" runat="server" DataSourceID="advisor_tutor_list" DataTextField="Name" DataValueField="user_id"></asp:DropDownList>
            <h5>Advisor of Studies:</h5>
            <asp:DropDownList ID="advisorddl" CssClass="full-width" runat="server" DataSourceID="advisor_tutor_list" DataTextField="Name" DataValueField="user_id"></asp:DropDownList>
            <h5>Enrollment Status:</h5>
            <asp:DropDownList ID="statusddl" CssClass="full-width" runat="server" DataSourceID="status_list" DataTextField="status" DataValueField="status_id"></asp:DropDownList>
            <asp:DropDownList ID="academic_year_ddl" CssClass="full-width" runat="server" DataSourceID="current_academic_year" DataTextField="academic_year" DataValueField="academic_year" Visible="false"></asp:DropDownList>
            <asp:Button ID="updatebutton1" runat="server" Text="Add Student" OnClick="updatebutton1_Click" />
        </div>
    </div>
</div>`
存储过程:

CREATE PROCEDURE AddStudent 
    @password nvarchar(50),
    @email nvarchar(50),
    @role_id int,
    @reset_hash nvarchar(50),
    @student_id int,
    @f_name nvarchar(50),
    @l_name nvarchar(50),
    @course_id int,
    @year int,
    @dob datetime,
    @parttime_fulltime nvarchar(50),
    @personal_tutor_id int,
    @advisor int,
    @status_id int,
    @academic_year int,
    @profile_image nvarchar(max)
AS
    INSERT INTO users (password, email, role_id, reset_hash)
    VALUES (@password, @email, @role_id, @reset_hash);

    SET @student_id = SCOPE_IDENTITY()

    INSERT INTO student_records (user_id, f_name, l_name, course_id, year, dob, parttime_fulltime, personal_tutor_id, advisor, status_id, academic_year, profile_image)
    VALUES (@student_id, @f_name, @l_name, @course_id, @year, @dob, @parttime_fulltime, @personal_tutor_id, @advisor, @status_id, @academic_year, @profile_image)
用户
表格结构:

user_id int
password    nvarchar(50)    
email   nvarchar(50)    
role_id int 
reset_hash  nvarchar(50)
user_id int
f_name  nvarchar(50)    
l_name  nvarchar(50)    
course_id   int 
year    int
dob datetime
parttime_fulltime   nvarchar(50)    
profile_image   nvarchar(MAX)   
personal_tutor_id   int 
status_id   int 
academic_year   int 
home_email  nvarchar(256)   
advisor int 
学生记录
表格结构:

user_id int
password    nvarchar(50)    
email   nvarchar(50)    
role_id int 
reset_hash  nvarchar(50)
user_id int
f_name  nvarchar(50)    
l_name  nvarchar(50)    
course_id   int 
year    int
dob datetime
parttime_fulltime   nvarchar(50)    
profile_image   nvarchar(MAX)   
personal_tutor_id   int 
status_id   int 
academic_year   int 
home_email  nvarchar(256)   
advisor int 
任何帮助都将不胜感激。

请试试这个

myCommand.Parameters.AddWithValue(“@student\u id”,0)

仔细检查所有这些属性,不应向它们传递任何整数值

@role_id int
@student_id int
@course_id int
@year int
@personal_tutor_id int
@advisor int
@status_id int
@academic_year int
请试试这个

myCommand.Parameters.AddWithValue(“@student\u id”,0)

仔细检查所有这些属性,不应向它们传递任何整数值

@role_id int
@student_id int
@course_id int
@year int
@personal_tutor_id int
@advisor int
@status_id int
@academic_year int

数据库表中的以下某些列可能是int,假设为nvarchar

@email nvarchar(50),
@reset_hash nvarchar(50),
@f_name nvarchar(50),
@l_name nvarchar(50),
@parttime_fulltime nvarchar(50),
@profile_image nvarchar(max)

数据库表中的以下某些列可能是int,假设为nvarchar

@email nvarchar(50),
@reset_hash nvarchar(50),
@f_name nvarchar(50),
@l_name nvarchar(50),
@parttime_fulltime nvarchar(50),
@profile_image nvarchar(max)

你不能像这样通过学生证

myCommand.Parameters.AddWithValue("@student_id", "");

您必须传递一个int值。

您不能像这样传递学生id

myCommand.Parameters.AddWithValue("@student_id", "");

您必须传递一个int值。

对于
用户
学生记录
,表结构是什么?@AdamV我用表结构更新了我的答案“在调用ExecuteOnQuery之前,您是否检查了每个参数的值?”?您正在为所有这些对象使用字符串,有几个正在读取SelectedValue,它可能是空字符串,也可能不是整数。请仔细阅读您的代码。
用户
学生记录
的表结构是什么?@AdamV我用表结构更新了我的答案“在调用之前是否检查了每个参数的值?”执行查询?您正在为所有这些值使用字符串,其中一些值正在读取SelectedValue,该值可能是空字符串,也可能不是int。请仔细阅读您的代码。它们在我的表中都是nvarchar值。它们在我的表中都是nvarchar值