C# 使用存储过程将数据类型nvarchar转换为int时出错
我知道这是一个相当常见的错误,但我似乎找不到问题的根源。由于必须在两个不同的表中输入数据,因此我试图使用存储过程添加学生的详细信息,但出现以下错误: System.Data.dll中发生“System.Data.SqlClient.SqlException”类型的异常,但未在用户代码中处理 其他信息:将数据类型nvarchar转换为int时出错 在'myCommand.ExecuteOnQuery()上 ASP.NET: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"
<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值