-2

私はプログラミング、特に sql server の使用が初めてです。テキストボックスと送信ボタンのあるユーザーページがあります。ユーザーがテキストボックスに情報を入力してボタンを押すと、その情報がデータベースに追加されます。データベースには、すべての情報がデータベースに追加された後に作成する必要がある列 UserID があります。UserID は、UserLastName と AutoIncrementNumber (新しい行に自動的に割り当てられるデータベースの列) で構成する必要があります。列と私はすべてを機能させる方法がわかりません。私を助けてください。ありがとうございました!

コードは次のとおりです。

        using (SqlConnection conn = new SqlConnection(@"Data Source=MyDataBase;Initial     Catalog=MyDataBase;Integrated Security=True;"))


        SqlCommand CmdSql = new SqlCommand
        ("INSERT INTO [tbluser] ([UserID],[UserLastName], [UserFirstName], [UserMiddleInitial] SELECT [dbo].[usernamehandle](@UserFirstName),@UserLastName, @UserFirstName, @UserMiddleInitial", conn);
        conn.Open();
        CmdSql.Parameters.AddWithValue("@UserLastName", txtNewUserLN.Text.ToString());
        CmdSql.Parameters.AddWithValue("@UserFirstName", txtNewUserFN.Text.ToString());
        CmdSql.Parameters.AddWithValue("@UserMiddleInitial", txtNewUserMI.Text.ToString());  
        CmdSql.Connection = conn;
        CmdSql.ExecuteNonQuery();
        conn.Close();

そしてここに関数があります:

USE [MyDataBase]
GO
/****** Object:  UserDefinedFunction [dbo].[usernamehandle]    Script Date: 04/07/2013 17:25:23 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[usernamehandle]
(@newuserName nchar(10))returns nchar(10)

AS
BEGIN
DECLARE @s2 nchar(256)
SET @s2 = ''
DECLARE @p int
DECLARE @ULN char(256)
DECLARE @UNAI int
SELECT @ULN = UserLastName FROM tblUser 
SELECT @UNAI = UserNameAutoIncre FROM tbluser
SET @s2 = @UNAI
while @p <=6 begin
DECLARE @c int
SET @c = ascii(substring(@newUserName, @p, 1))
SET @s2 += char(@c) 
end
return @s2
end
4

2 に答える 2

1

SQL で関数を直接呼び出してみてください。

注: 関数のパラメーターを確認してください。パラメータはユーザーの名であると想定しています。

SqlCommand CmdSql = new SqlCommand
        ("INSERT INTO [tbluser] ([UserID],[UserLastName], [UserFirstName], [UserMiddleInitial]) SELECT [dbo].[usernamehandle](@UserFirstName), @UserLastName, @UserFirstName, @UserMiddleInitial, conn);
于 2013-04-08T01:59:59.027 に答える
0

関数を使用してデータを挿入することはできません。select ステートメントにのみ使用される関数は、DML ではなく DDL のみを意味するため、ストアド プロシージャを使用する必要があります。

于 2013-04-08T08:12:17.300 に答える