Pages

Friday, February 11, 2011

Asp.net - inserting form data into a database

Here is a quick explanation for taking the information from a form throwing it into a database.

First let's import the libraries for connecting to SQL. These need to got at the very top of your code page.
Imports System.Data
Imports System.Data.SqlClient

Now the code. This will likely be placed in the click even of a button.
Dim sqlCon As New SqlConnection("Data Source=.\Sqlexpress;Initial Catalog=Sprinklers;Integrated Security=True")

Dim sql As String = "Insert into Sprinklers " & _
" (sprinklername,description) " & _
" values " & _
" (@sprinklername, @description) "

Dim sqlCommand As New SqlCommand(sql, sqlCon)
sqlCommand.Parameters.Add(New SqlParameter("@sprinklername", SqlDbType.VarChar, 50))
sqlCommand.Parameters("@sprinklername").Value = txtName.Text
sqlCommand.Parameters.Add(New SqlParameter("@description", SqlDbType.VarChar, 500))
sqlCommand.Parameters("@description").Value = txtDesc.Text
sqlCommand.Connection.Open()
Try
sqlCommand.ExecuteNonQuery()
Catch ex As SqlException
MsgBox(ex.Message)
End Try

sqlCommand.Connection.Close()
sqlCommand = Nothing
sqlcon = Nothing



Now for the code with comments. This will explain line by line what is happening.
     ' We need to tell our program how to get to the database
Dim sqlCon As New SqlConnection("Data Source=.\Sqlexpress;Initial Catalog=Sprinklers;Integrated Security=True")

' Here is the statement that inserts data into the database.
' Notice the @sprinklername type variable. We will use a parameters
' feature to replace those with our form values
Dim sql As String = "Insert into Sprinklers " & _
" (sprinklername,description) " & _
" values " & _
" (@sprinklername, @description) "

' The sql connection told our program where to go,
' this tells the program what to do when it gets there
' We are passing in the sql statement and the connection we created before
Dim sqlCommand As New SqlCommand(sql, sqlCon)

' Now its time to give some values to those @ variables
' First let's tell the program which param we are dealing with, @sprinklername in this case
' The sqldbtype and the last number in the variables here need to match the datatype
' and length that are set for the column we are inserting into.
sqlCommand.Parameters.Add(New SqlParameter("@sprinklername", SqlDbType.VarChar, 50))
' Now that we've added a new parameter, let's give it a value.
sqlCommand.Parameters("@sprinklername").Value = txtName.Text

' Do it again for the other variable
sqlCommand.Parameters.Add(New SqlParameter("@description", SqlDbType.VarChar, 500))
sqlCommand.Parameters("@description").Value = txtDesc.Text

' Our statement is fully prepared and we need to open the connection.
sqlCommand.Connection.Open()

Try
' This will do the actual execution of the query. We want this inside of
' a try in case something goes wrong.
sqlCommand.ExecuteNonQuery()
Catch ex As SqlException
MsgBox(ex.Message)
End Try

' Close the connection to the database
sqlCommand.Connection.Close()

' Do away with the connection and command for memory management.
sqlCommand = Nothing
sqlCon = Nothing

Tuesday, February 1, 2011

Transferring users from one sql server to another

While setting up another server, I set about to learn how to transfer all of my students from one sql server to the new one. I came across this helpful article at: http://support.microsoft.com/kb/918992


To transfer the logins and the passwords from the instance of SQL Server on server A to the instance of SQL Server on server B, follow these steps:
  1. On server A, start SQL Server Management Studio, and then connect to the instance of SQL Server from which you moved the database.
  2. Open a new Query Editor window, and then run the following script.
     USE master 
    GO
    IF OBJECT_ID ('sp_hexadecimal') IS NOT NULL
    DROP PROCEDURE sp_hexadecimal
    GO
    CREATE PROCEDURE sp_hexadecimal
    @binvalue varbinary(256),
    @hexvalue varchar (514) OUTPUT
    AS
    DECLARE @charvalue varchar (514)
    DECLARE @i int
    DECLARE @length int
    DECLARE @hexstring char(16)
    SELECT @charvalue = '0x'
    SELECT @i = 1
    SELECT @length = DATALENGTH (@binvalue)
    SELECT @hexstring = '0123456789ABCDEF'
    WHILE (@i <= @length)
    BEGIN
    DECLARE @tempint int
    DECLARE @firstint int
    DECLARE @secondint int
    SELECT @tempint = CONVERT(int, SUBSTRING(@binvalue,@i,1))
    SELECT @firstint = FLOOR(@tempint/16)
    SELECT @secondint = @tempint - (@firstint*16)
    SELECT @charvalue = @charvalue +
    SUBSTRING(@hexstring, @firstint+1, 1) +
    SUBSTRING(@hexstring, @secondint+1, 1)
    SELECT @i = @i + 1
    END

    SELECT @hexvalue = @charvalue
    GO

    IF OBJECT_ID ('sp_help_revlogin') IS NOT NULL
    DROP PROCEDURE sp_help_revlogin
    GO
    CREATE PROCEDURE sp_help_revlogin @login_name sysname = NULL AS
    DECLARE @name sysname
    DECLARE @type varchar (1)
    DECLARE @hasaccess int
    DECLARE @denylogin int
    DECLARE @is_disabled int
    DECLARE @PWD_varbinary varbinary (256)
    DECLARE @PWD_string varchar (514)
    DECLARE @SID_varbinary varbinary (85)
    DECLARE @SID_string varchar (514)
    DECLARE @tmpstr varchar (1024)
    DECLARE @is_policy_checked varchar (3)
    DECLARE @is_expiration_checked varchar (3)

    DECLARE @defaultdb sysname

    IF (@login_name IS NULL)
    DECLARE login_curs CURSOR FOR

    SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
    sys.server_principals p LEFT JOIN sys.syslogins l
    ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name <> 'sa'
    ELSE
    DECLARE login_curs CURSOR FOR


    SELECT p.sid, p.name, p.type, p.is_disabled, p.default_database_name, l.hasaccess, l.denylogin FROM
    sys.server_principals p LEFT JOIN sys.syslogins l
    ON ( l.name = p.name ) WHERE p.type IN ( 'S', 'G', 'U' ) AND p.name = @login_name
    OPEN login_curs

    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
    IF (@@fetch_status = -1)
    BEGIN
    PRINT 'No login(s) found.'
    CLOSE login_curs
    DEALLOCATE login_curs
    RETURN -1
    END
    SET @tmpstr = '/* sp_help_revlogin script '
    PRINT @tmpstr
    SET @tmpstr = '** Generated ' + CONVERT (varchar, GETDATE()) + ' on ' + @@SERVERNAME + ' */'
    PRINT @tmpstr
    PRINT ''
    WHILE (@@fetch_status <> -1)
    BEGIN
    IF (@@fetch_status <> -2)
    BEGIN
    PRINT ''
    SET @tmpstr = '-- Login: ' + @name
    PRINT @tmpstr
    IF (@type IN ( 'G', 'U'))
    BEGIN -- NT authenticated account/group

    SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' FROM WINDOWS WITH DEFAULT_DATABASE = [' + @defaultdb + ']'
    END
    ELSE BEGIN -- SQL Server authentication
    -- obtain password and sid
    SET @PWD_varbinary = CAST( LOGINPROPERTY( @name, 'PasswordHash' ) AS varbinary (256) )
    EXEC sp_hexadecimal @PWD_varbinary, @PWD_string OUT
    EXEC sp_hexadecimal @SID_varbinary,@SID_string OUT

    -- obtain password policy state
    SELECT @is_policy_checked = CASE is_policy_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name
    SELECT @is_expiration_checked = CASE is_expiration_checked WHEN 1 THEN 'ON' WHEN 0 THEN 'OFF' ELSE NULL END FROM sys.sql_logins WHERE name = @name

    SET @tmpstr = 'CREATE LOGIN ' + QUOTENAME( @name ) + ' WITH PASSWORD = ' + @PWD_string + ' HASHED, SID = ' + @SID_string + ', DEFAULT_DATABASE = [' + @defaultdb + ']'

    IF ( @is_policy_checked IS NOT NULL )
    BEGIN
    SET @tmpstr = @tmpstr + ', CHECK_POLICY = ' + @is_policy_checked
    END
    IF ( @is_expiration_checked IS NOT NULL )
    BEGIN
    SET @tmpstr = @tmpstr + ', CHECK_EXPIRATION = ' + @is_expiration_checked
    END
    END
    IF (@denylogin = 1)
    BEGIN -- login is denied access
    SET @tmpstr = @tmpstr + '; DENY CONNECT SQL TO ' + QUOTENAME( @name )
    END
    ELSE IF (@hasaccess = 0)
    BEGIN -- login exists but does not have access
    SET @tmpstr = @tmpstr + '; REVOKE CONNECT SQL TO ' + QUOTENAME( @name )
    END
    IF (@is_disabled = 1)
    BEGIN -- login is disabled
    SET @tmpstr = @tmpstr + '; ALTER LOGIN ' + QUOTENAME( @name ) + ' DISABLE'
    END
    PRINT @tmpstr
    END

    FETCH NEXT FROM login_curs INTO @SID_varbinary, @name, @type, @is_disabled, @defaultdb, @hasaccess, @denylogin
    END
    CLOSE login_curs
    DEALLOCATE login_curs
    RETURN 0
    GO

    Note This script creates two stored procedures in the master database. The two stored procedures are named the sp_hexadecimal stored procedure and the sp_help_revlogin stored procedure.
  3. Run the following statement.
    EXEC sp_help_revlogin
    The output script that is generated by the sp_help_revlogin stored procedure is the login script. This login script creates the logins that have the original Security Identifier (SID) and the original password.
  4. On server B, start SQL Server Management Studio, and then connect to the instance of SQL Server to which you moved the database.

    Important Before you go to step 5, review the information in the "Remarks" section.
  5. Open a new Query Editor window, and then run the output script that is generated in step 3.