har ett litet problem.. Din fråga har @imgName, @imgDescription etc men när du skapar dina parametrar så skriver du @img_name etc har gjort det nu... men den vill ända att jag ska deklarera. Aha, du kör med OleDb ser jag nu. Ersätta alla dina parametrar i frågan till enbart "?" alltså:varför får jag "must declare...."??
ska göra ett bildupload script och får bara
Must declare the variable '@imgName'
när jag kör mot sql databasen...
koden:
<code>
<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDB" %>
<%@ import Namespace="System.Web.UI.WebControls" %>
<%@ import Namespace="System.IO" %>
<script runat="server">
'<- Databasanslutning ->
Dim myConnection As New OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=(local);Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=(local);Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=citysidan;")
Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Public Sub UploadBtn_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)
'<- Hämta all ifyllt data från webbsidan ->
Dim imgStream As Stream = UploadFile.PostedFile.InputStream
Dim imgLen As Integer = UploadFile.PostedFile.ContentLength
Dim imgUploadedName As String = UploadFile.PostedFile.FileName
Dim imgBinaryData(imgLen) As Byte
Dim imgContentType As String = UploadFile.PostedFile.ContentType
Dim imgName_value As String = PictureName.Text
Dim imgDescription_value As String = PictureDescription.Text
Dim imgTime_value As String = DateTime.Now.ToString("G")
Dim imgUploader_value As String = Uploader.Text
'<- Anropar funktionen stringcut för att få fram filtypen ->
Dim ImgType As String = stringcut(imgContentType)
'<- Kolla att vald fil verkligen är en bild ->
If imgLen < 1 Then
lblMessage.Text = "Du måste välja en bild!"
Exit Sub
End If
If ImgType <> "image/" Then
lblMessage.Text = "Vald fil är ej en bild !"
Exit Sub
End If
'<- Kontrollera bildstorleken ->
If imgLen > 100000 Then
lblMessage.Text = "Bilden är för stor!(" & imgLen & " byte) Max är 100000 byte"
Exit Sub
End If
'<- Kontrollera att alla fält är ifyllda ->
If PictureName.Text = "" Then
lblMessage.Text = "Ge ett namn till bilden!"
Exit Sub
ElseIf PictureDescription.Text = "" Then
lblMessage.Text = "Skriv en bildbeskrivning!"
Exit Sub
ElseIf Uploader.Text = "" Then
lblMessage.Text = "Skriv in ditt namn!"
Exit Sub
End If
'<- Filtrera bort ev känsliga tecken ->
imgName_value = imgName_value.Replace("'", "'")
imgName_value = imgName_value.Replace(" ", " ")
imgUploader_value = imgUploader_value.Replace("'", "'")
imgUploader_value = imgUploader_value.Replace(" ", " ")
imgDescription_value = imgDescription_value.Replace("'", "'")
imgDescription_value = imgDescription_value.Replace(" ", " ")
'<- Konverterar "bildströmmen" till en Byte Array
Dim n As Integer = imgStream.Read(imgBinaryData, 0, imgLen)
'<- Anropar funktionen AddPicture för att lägga in datat i databasen ->
Dim NumRowsAffected As Integer = AddPicture(imgName_value, imgDescription_value, imgBinaryData, imgContentType, imgUploader_value, imgTime_value, imgLen.ToString)
'<- Kontrollera om uppladdningen lyckades '>
If NumRowsAffected > 0 Then
lblMessage.Text = "Bilden uppladdad!"
Else
'lblMessage.Text = "Det blev något fel vid uppladdningen av bilden!"
End If
End Sub
Function AddPicture(ByVal imgName As String, ByVal imgDescription As String, ByVal imgbin As Byte(), ByVal imgcontenttype As String, ByVal imguploader As String, ByVal imgtime As String, ByVal imgsize As String) As Integer
Dim myCommand As New OleDb.OleDbCommand("INSERT INTO images (image_name, image_description, image_data, image_type, image_uploader, image_time, image_size) VALUES (@imgName, @imgDescription, @imgbin, @imgcontenttype, @imguploader, @imgtime, @imgsize)", myConnection)
Dim numRowsAffected As Integer
Dim param0 As New OleDbParameter("@img_name", OleDbType.VarChar, 50)
param0.Value = imgName
myCommand.Parameters.Add(param0)
Dim param1 As New OleDbParameter("@img_description", OleDbType.VarChar, 255)
param1.Value = imgDescription
myCommand.Parameters.Add(param1)
Dim param2 As New OleDbParameter("@img_data", OleDbType.Binary)
param2.Value = imgbin
myCommand.Parameters.Add(param2)
Dim param3 As New OleDbParameter("@img_contenttype", OleDbType.VarChar, 50)
param3.Value = imgcontenttype
myCommand.Parameters.Add(param3)
Dim param4 As New OleDbParameter("@img_uploader", OleDbType.VarChar, 50)
param4.Value = imguploader
myCommand.Parameters.Add(param4)
Dim param5 As New OleDbParameter("@img_time", OleDbType.VarChar, 50)
param5.Value = imgtime
myCommand.Parameters.Add(param5)
Dim param6 As New OleDbParameter("@img_size", OleDbType.VarChar, 50)
param6.Value = imgsize
myCommand.Parameters.Add(param6)
Try
myCommand.Connection.Open()
numRowsAffected = myCommand.ExecuteNonQuery()
myCommand.Connection.Close()
Catch ex As Exception
lblMessage.Text = ex.Message
Exit Function
End Try
Return numRowsAffected
End Function
Function stringcut(ByVal strArgument As String) As String
Dim sb As New System.Text.StringBuilder(strArgument)
Return (sb.Remove(6, (sb.Length - 6)).ToString)
End Function
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Ladda upp bild</title>
</head>
<body>
<form runat="server" enctype="multipart/form-data">
<div align="center">Bilder ska helst vara i gif eller jpg format.
<br> Max storlek 100 kb.
</div>
<br>
<TABLE align="center" cellSpacing="0" cellPadding="1" border="0">
<TR>
<TD align="left">Bild
namn: <br><asp:TextBox MaxLength="40" id="PictureName" runat="server"/>
</TD>
</TR>
<TR>
<TD align="left">Kort bild
beskrivning: <br><asp:TextBox MaxLength="255" id="PictureDescription" runat="server" TextMode="MultiLine"/>
</TD>
</TR>
<TR>
<TD align="left">Ditt
namn: <br><asp:TextBox MaxLength="40" id="Uploader" runat="server"/>
</TD>
</TR>
<TR>
<TD align="left">Välj
bild: <br><INPUT id="UploadFile" type="file" name="UploadFile" runat="server">
</TD>
</TR>
<tr>
<td align="center">
<asp:Button id="UploadBtn" OnClick="UploadBtn_Click" runat="server" Text="Ladda upp"/>
<INPUT type="reset" value="Reset">
</td>
</tr>
</TABLE>
<br>
<div align="center"><asp:label id="lblMessage" runat="server"/></div>
</form>
</body>
</html>
</code>Sv: varför får jag "must declare...."??
Ändra dessa så det stämmer överrens med de som finns i din fråga.
/Fredrik Normén NSQUARED2
http://www.nsquared2.netSv: varför får jag "must declare...."??
<code>
<%@ Page Language="VB" %>
<%@ import Namespace="System.Data" %>
<%@ import Namespace="System.Data.OleDB" %>
<%@ import Namespace="System.Web.UI.WebControls" %>
<%@ import Namespace="System.IO" %>
<script runat="server">
'<- Databasanslutning ->
Dim myConnection As New OleDbConnection("Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=(local);Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=(local);Use Encryption for Data=False;Tag with column collation when possible=False;Initial Catalog=citysidan;")
Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs)
End Sub
Public Sub UploadBtn_Click(ByVal Sender As System.Object, ByVal E As System.EventArgs)
'<- Hämta all ifyllt data från webbsidan ->
Dim imgStream As Stream = UploadFile.PostedFile.InputStream
Dim imgLen As Integer = UploadFile.PostedFile.ContentLength
Dim imgUploadedName As String = UploadFile.PostedFile.FileName
Dim imgBinaryData(imgLen) As Byte
Dim imgContentType As String = UploadFile.PostedFile.ContentType
Dim imgName_value As String = PictureName.Text
Dim imgDescription_value As String = PictureDescription.Text
Dim imgTime_value As String = DateTime.Now.ToString("G")
Dim imgUploader_value As String = Uploader.Text
'<- Anropar funktionen stringcut för att få fram filtypen ->
Dim ImgType As String = stringcut(imgContentType)
'<- Kolla att vald fil verkligen är en bild ->
If imgLen < 1 Then
lblMessage.Text = "Du måste välja en bild!"
Exit Sub
End If
If ImgType <> "image/" Then
lblMessage.Text = "Vald fil är ej en bild !"
Exit Sub
End If
'<- Kontrollera bildstorleken ->
If imgLen > 100000 Then
lblMessage.Text = "Bilden är för stor!(" & imgLen & " byte) Max är 100000 byte"
Exit Sub
End If
'<- Kontrollera att alla fält är ifyllda ->
If PictureName.Text = "" Then
lblMessage.Text = "Ge ett namn till bilden!"
Exit Sub
ElseIf PictureDescription.Text = "" Then
lblMessage.Text = "Skriv en bildbeskrivning!"
Exit Sub
ElseIf Uploader.Text = "" Then
lblMessage.Text = "Skriv in ditt namn!"
Exit Sub
End If
'<- Filtrera bort ev känsliga tecken ->
imgName_value = imgName_value.Replace("'", "'")
imgName_value = imgName_value.Replace(" ", " ")
imgUploader_value = imgUploader_value.Replace("'", "'")
imgUploader_value = imgUploader_value.Replace(" ", " ")
imgDescription_value = imgDescription_value.Replace("'", "'")
imgDescription_value = imgDescription_value.Replace(" ", " ")
'<- Konverterar "bildströmmen" till en Byte Array
Dim n As Integer = imgStream.Read(imgBinaryData, 0, imgLen)
'<- Anropar funktionen AddPicture för att lägga in datat i databasen ->
Dim NumRowsAffected As Integer = AddPicture(imgName_value, imgDescription_value, imgBinaryData, imgContentType, imgUploader_value, imgTime_value, imgLen.ToString)
'<- Kontrollera om uppladdningen lyckades '>
If NumRowsAffected > 0 Then
lblMessage.Text = "Bilden uppladdad!"
Else
'lblMessage.Text = "Det blev något fel vid uppladdningen av bilden!"
End If
End Sub
Function AddPicture(ByVal imgName As String, ByVal imgDescription As String, ByVal imgBin As Byte(), ByVal imgContentType As String, ByVal imgUploader As String, ByVal imgTime As String, ByVal imgSize As String) As Integer
Dim myCommand As New OleDb.OleDbCommand("INSERT INTO images (image_name, image_description, image_data, image_type, image_uploader, image_time, image_size) VALUES (@imgName, @imgDescription, @imgBin, @imgContentType, @imgUploader, @imgTime, @imgSize)", myConnection)
Dim numRowsAffected As Integer
Dim param0 As New OleDbParameter("@imgName", OleDbType.VarChar, 50)
param0.Value = imgName
myCommand.Parameters.Add(param0)
Dim param1 As New OleDbParameter("@imgDescription", OleDbType.VarChar, 255)
param1.Value = imgDescription
myCommand.Parameters.Add(param1)
Dim param2 As New OleDbParameter("@imgData", OleDbType.Binary)
param2.Value = imgBin
myCommand.Parameters.Add(param2)
Dim param3 As New OleDbParameter("@imgContentType", OleDbType.VarChar, 50)
param3.Value = imgContentType
myCommand.Parameters.Add(param3)
Dim param4 As New OleDbParameter("@imgUploader", OleDbType.VarChar, 50)
param4.Value = imgUploader
myCommand.Parameters.Add(param4)
Dim param5 As New OleDbParameter("@imgTime", OleDbType.VarChar, 50)
param5.Value = imgTime
myCommand.Parameters.Add(param5)
Dim param6 As New OleDbParameter("@imgSize", OleDbType.VarChar, 50)
param6.Value = imgSize
myCommand.Parameters.Add(param6)
Try
myCommand.Connection.Open()
numRowsAffected = myCommand.ExecuteNonQuery()
myCommand.Connection.Close()
Catch ex As Exception
lblMessage.Text = ex.Message
Exit Function
End Try
Return numRowsAffected
End Function
Function stringcut(ByVal strArgument As String) As String
Dim sb As New System.Text.StringBuilder(strArgument)
Return (sb.Remove(6, (sb.Length - 6)).ToString)
End Function
</script>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Ladda upp bild</title>
</head>
<body>
<form runat="server" enctype="multipart/form-data">
<div align="center">Bilder ska helst vara i gif eller jpg format.
<br> Max storlek 100 kb.
</div>
<br>
<TABLE align="center" cellSpacing="0" cellPadding="1" border="0">
<TR>
<TD align="left">Bild
namn: <br><asp:TextBox MaxLength="40" id="PictureName" runat="server"/>
</TD>
</TR>
<TR>
<TD align="left">Kort bild
beskrivning: <br><asp:TextBox MaxLength="255" id="PictureDescription" runat="server" TextMode="MultiLine"/>
</TD>
</TR>
<TR>
<TD align="left">Ditt
namn: <br><asp:TextBox MaxLength="40" id="Uploader" runat="server"/>
</TD>
</TR>
<TR>
<TD align="left">Välj
bild: <br><INPUT id="UploadFile" type="file" name="UploadFile" runat="server">
</TD>
</TR>
<tr>
<td align="center">
<asp:Button id="UploadBtn" OnClick="UploadBtn_Click" runat="server" Text="Ladda upp"/>
<INPUT type="reset" value="Reset">
</td>
</tr>
</TABLE>
<br>
<div align="center"><asp:label id="lblMessage" runat="server"/></div>
</form>
</body>
</html>
</code>Sv: varför får jag "must declare...."??
VALUES ( ?,?,?,? ..... )
Men låt dina andra parametrar vara kvar som dom är. Se bara till att dom läggs till i samma ordning som du har definerat VALUES i din fråga.
OLE DB .Net providers använder ? istället för parametrar med namn.
/Fredrik Normén NSQUARED2
http://www.nsquared2.net